zoukankan      html  css  js  c++  java
  • 使用DevExpress.XtraGrid.Views.Grid.GridView 点击表头排序时焦点固定到所选中行的行号,而不是固定到这条数据 下

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

    开始以为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中。

      

  • 相关阅读:
    在cmd下执行py脚本报Traceback (most recent call last)报错解决
    git上传文件方法
    js获取元素方法和jquery语法操作元素方法
    获取config.ini文件配置的方法
    利用random随机函数实现抽奖方法
    selenium封装 运行脚本+生成测试报告+发送email
    基于KB的QA系统学习记录
    python学习记录
    manjaro + kde 使用过程中问题记录及解决方法
    linux学习记录
  • 原文地址:https://www.cnblogs.com/haowuji/p/2817585.html
Copyright © 2011-2022 走看看