以可见的相同顺序访问网格列

时间:2009-05-20 09:46:52

标签: asp.net ultragrid

我需要以相同的顺序访问infragistics ultragrid的列,它们以网格显示。如果我能够以相同的顺序获得列的索引,因为它们在网格上可见,我可以解决我的问题。 提前谢谢。

拉​​利特

3 个答案:

答案 0 :(得分:2)

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 );
       }

http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinGrid.v8.2~Infragistics.Win.UltraWinGrid.UltraGridColumn~GetRelatedVisibleColumn.html

答案 1 :(得分:0)

我想你可以尝试处理订单更改时触发的事件并跟踪所有更改,但这似乎是要求微妙的错误蔓延。

我考虑循环遍历所有列并尝试使用一些属性来告诉我他们当前的位置(可能是TabOrder?)并使用它来编译列的inorder列表。我猜你可能需要使用Column.GetRelatedVisibleColumn()方法遍历每个列。

我还没有真正实现它,因为我有其他更高优先级的问题,但这可能是我最终走下坡路。

答案 2 :(得分:0)

这是一个老问题,但我最近遇到了同样的问题并以这种方式解决了这个问题:

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来显示列。