DevExpress 网格视图滚动条(调整网格左坐标以使焦点列位于网格中心)

本文关键字:网格 于网格 焦点 滚动条 视图 调整 DevExpress 坐标 | 更新日期: 2024-10-26 03:52:18

我有一个表单,它有一个DevExpress GridView。网格视图有接近 100 列。目前,我一次向用户显示 30 列,其余列可以通过在右侧滚动来访问。

我想实现一个功能,而不是滚动,这样我在文本框中输入一个值(列号)并单击一个按钮(例如),它应该导航到 gridView 中的该特定列。

到目前为止,我能够实现以下内容:

  1. 假设,一开始我显示第 1-30 列并搜索第 45 列,它显示结果,并在最右侧选择列。

  2. 假设,一开始我向用户显示 20-50 列并搜索第 10 列,它显示在最右侧。

我想以这样一种方式实现:每当我搜索一列时,它不应该显示在最右边或最左边,而应该显示在中心。

请检查下面给出的代码。逻辑似乎很好,但无法正常工作。

 private void SetLeftCoord(int toBeFocusedIndex)
    {
        int currLeftEndColIndex = gvVisualizeNextGenSequence.LeftCoord / gvVisualizeNextGenSequence.VisibleColumns[0].Width;
        int currRightEndColIndex = currLeftEndColIndex - 1 + GetVisibleColumnCount(gvVisualizeNextGenSequence);
        if (toBeFocusedIndex < currRightEndColIndex && toBeFocusedIndex > currLeftEndColIndex)
        {
            int difference = toBeFocusedIndex - currLeftEndColIndex;
            gvVisualizeNextGenSequence.LeftCoord +=
                (difference * gvVisualizeNextGenSequence.VisibleColumns[0].Width) -
                (GetVisibleColumnCount(gvVisualizeNextGenSequence) / 2) * gvVisualizeNextGenSequence.VisibleColumns[0].Width;
        }
        if (toBeFocusedIndex < (GetVisibleColumnCount(gvVisualizeNextGenSequence) / 2) ||
          toBeFocusedIndex > gvVisualizeNextGenSequence.VisibleColumns.Count - (GetVisibleColumnCount(gvVisualizeNextGenSequence) / 2))
        { }
        if (toBeFocusedIndex < currLeftEndColIndex)
        { gvVisualizeNextGenSequence.LeftCoord -= (GetVisibleColumnCount(gvVisualizeNextGenSequence) / 2) * gvVisualizeNextGenSequence.VisibleColumns[0].Width; }
        if (toBeFocusedIndex > currRightEndColIndex)
        { gvVisualizeNextGenSequence.LeftCoord += (GetVisibleColumnCount(gvVisualizeNextGenSequence) / 2) * gvVisualizeNextGenSequence.VisibleColumns[0].Width; }

        gvVisualizeNextGenSequence.FocusedColumn = gvVisualizeNextGenSequence.Columns["Column" + toBeFocusedIndex];

    }

还有其他方法可以做到这一点吗?"在任何时间点,我的焦点列都应该在网格的中心"

谢谢

曼格什·维拉斯·卡斯利卡尔

DevExpress 网格视图滚动条(调整网格左坐标以使焦点列位于网格中心)

gridview1.LeftCoord = (gridview1.FocusedColumn.VisibleIndex - visibleColumnsCount / 2) * gridview1.VisibleColumns[0].Width;
Visiblecolumnscount = // count of currently visible columns in the view 
  public int GetVisibleColumnCount(GridView view)
        {
            GridViewInfo info = view.GetViewInfo() as GridViewInfo;
            int visibleColumnCount = 0;
            for (int i = 0; i < view.VisibleColumns.Count; i++)
            {
                if (info.GetColumnLeftCoord(view.GetVisibleColumn(i))
                    < view.ViewRect.Width - info.ViewRects.IndicatorWidth)
                    visibleColumnCount++;
            }
            return visibleColumnCount;
        }