我需要以与它们在网格中显示的顺序相同的顺序访问基础设施超网格的列。如果我可以按照与网格上可见的相同顺序获取列的索引,我可以解决我的问题。提前致谢。
拉利特
我需要以与它们在网格中显示的顺序相同的顺序访问基础设施超网格的列。如果我可以按照与网格上可见的相同顺序获取列的索引,我可以解决我的问题。提前致谢。
拉利特
UltraGridColumn column = this.ultraGrid1.DisplayLayout.Bands[0].Columns[0];
Debug.WriteLine( "Columns in visible order: ");
// Get the first visible column by passing in VisibleRelation.First.
column = column.GetRelatedVisibleColumn( VisibleRelation.First );
while ( null != column )
{
Debug.WriteLine( " " + column.Key );
// Get the next visible column by passing in VisibleRelation.Next.
column = column.GetRelatedVisibleColumn( VisibleRelation.Next );
}
我想您可以尝试处理订单更改时触发的事件并跟踪所有更改,但这似乎是在要求潜入微妙的错误。
我考虑遍历所有列并尝试使用一些属性来告诉我它们的当前位置(可能是 TabOrder?)并使用它来编译列的无序列表。我想您可能必须使用 Column.GetRelatedVisibleColumn() 方法遍历每个列。
我还没有真正实施它,因为我还有其他更高优先级的问题,但这可能是我最终要走的路。
这是一个老问题,但我最近遇到了同样的问题并以这种方式解决了它:
var selectedCells = this.Selected.Cells;
List<int> columns = new List<int>();
foreach (var cell in selectedCells)
{
if (!columns.Contains(cell.Column.Index))
columns.Add(cell.Column.Index);
}
columns.Sort((x, y) => this.DisplayLayout.Rows.Band.Columns[x].Header.VisiblePosition.CompareTo(this.DisplayLayout.Rows.Band.Columns[y].Header.VisiblePosition));
然后,您可以使用columns
来访问列,以便它们显示。