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中。

      

  • 相关阅读:
    Ubuntu下SSH设置
    Runtime.getRuntime().exec学习记录[转贴]
    ffmpeg参数说明(转载)
    学习NSNotification经历
    iphone 推送服务Apple Push Notification Service
    MFC枚举窗口
    WebQQ协议分析(3)——获取用户信息
    Cannot access a disposed object
    WebQQ协议分析(1)——登录
    WebQQ协议分析(4)——获取好友信息(1)
  • 原文地址:https://www.cnblogs.com/haowuji/p/2817585.html
Copyright © 2011-2022 走看看