DevExpress 网格视图滚动条(调整网格左坐标以使焦点列位于网格中心)
本文关键字:网格 于网格 焦点 滚动条 视图 调整 DevExpress 坐标 | 更新日期: 2024-10-26 03:52:18
我有一个表单,它有一个DevExpress GridView。网格视图有接近 100 列。目前,我一次向用户显示 30 列,其余列可以通过在右侧滚动来访问。
我想实现一个功能,而不是滚动,这样我在文本框中输入一个值(列号)并单击一个按钮(例如),它应该导航到 gridView 中的该特定列。
到目前为止,我能够实现以下内容:
-
假设,一开始我显示第 1-30 列并搜索第 45 列,它显示结果,并在最右侧选择列。
-
假设,一开始我向用户显示 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];
}
还有其他方法可以做到这一点吗?"在任何时间点,我的焦点列都应该在网格的中心"
谢谢
曼格什·维拉斯·卡斯利卡尔
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;
}