使用DevExpress.XtraGrid.Views.Grid.GridView 点击表头排序时焦点固定到所选中行的行号,而不是固定到这条数据...

本文介绍了一种解决DevExpressGridView组件在排序后焦点行位移问题的方法,通过自定义事件来记录排序前的焦点行位置,并在排序结束后将焦点重新定位到该行。适用于窗体页面,对于Web页面,可以考虑使用Cookie来保存行号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近客户反应点击表头排序的时候。比如排序前选中的是第一行,那么排序后也选中的是第一行。而不是焦点行随着数据走。

开始以为DevExpress.XtraGrid.Views.Grid.GridView这个里面应该有设置这个的属性,但是找了好久就是没有找到。最后只能给DevExpress.XtraGrid.Views.Grid.GridView写了两个事件。

  1.先建立一个页面名称叫做:frmPublic,这个页面里面有一个静态的属性是

  

        /// <summary>
        /// 设置排序时的行号
        /// </summary>
        private static int StartSort = -1;

   2.给这个页面添加第一个静态方法:gridView_StartSorting(排序前)

排序前的方法
#region 排序前+public static void gridView_StartSorting(object sender, EventArgs e)
        /// <summary>
        /// 排序前
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public static void gridView_StartSorting(object sender, EventArgs e)
        {
            StartSort = -1;
            if (((DevExpress.XtraGrid.Views.Grid.GridView)sender).GetSelectedRows().Length > 0)
            {
                StartSort = ((DevExpress.XtraGrid.Views.Grid.GridView)sender).GetSelectedRows()[0];
            }
        }
        #endregion

  3.给这个页面添加第二个静态方法:gridView_EndSorting(排序后)

排序后的方法
#region 排序后+public static void gridView_EndSorting(object sender, EventArgs e)
        /// <summary>
        /// 排序后
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public static void gridView_EndSorting(object sender, EventArgs e)
        {
            if (StartSort > -1)
            {
                for (int i = 0; i < ((DevExpress.XtraGrid.Views.Grid.GridView)sender).RowCount; i++)
                {
                    ((DevExpress.XtraGrid.Views.Grid.GridView)sender).UnselectRow(i);
                }
                ((DevExpress.XtraGrid.Views.Grid.GridView)sender).FocusedRowHandle = StartSort;
                ((DevExpress.XtraGrid.Views.Grid.GridView)sender).SelectRow(StartSort);
            }
        }
        #endregion

  然后这个页面就告一段落了。

  最后给需要排序的页面的DevExpress.XtraGrid.Views.Grid.GridView绑定事件,代码如下:

绑定事件
                //
                gvCmCode.EndSorting += new EventHandler(frmPublic.gridView_EndSorting);
                gvCmCode.StartSorting += new EventHandler(frmPublic.gridView_StartSorting);

   然后运行就ok了。

结论:这个的原理是,点击排序前是先把焦点行号记住在一个静态变量中。然后点击排序后再让表格的焦点成为这个行号。

    注意这个目前适用于:窗体的页面。在web的页面就不好使了,如果是web的页面可以把那个行号放在cookie中。

 

  

转载于:https://www.cnblogs.com/haowuji/archive/2012/12/14/2817585.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值