2013-08-07 53 views
1

我正在通过代码填充DataGridView(Winforms),并从DataTable中标记行。同样将列重新排序的属性设置为true。
如果我重新排列列,并且想获取新的列顺序,那么顺序始终是相同的。这意味着,如果第一列被命名为"ID"和最后一列被命名为"Price",以代替PricePrice代替ID移动ID,如果我想列出使用这段代码列:重新排列DataGridView中的列

  for (int i = 0; i <= dgAnalyse.Columns.Count - 1; i++) 
      { 
       if (dgAnalyse.Columns[i].Visible == true) 
       { 
        Console.WriteLine(dgAnalyse.Columns[i].HeaderText); 
       } 
      } 

我会得到:ID,价格不是价格,ID。

是否有可能获得新的列顺序列表?

回答

1

如果我重新排序列,我想获得列的顺序 总是相同的新秩序。

当使用DataGridView.AllowUserToOrderColumns功能,在运行时更改列的顺序不会改变DataGridView.Columns收集的顺序。只是DisplayIndex列的属性会改变。

如果你想迭代到显示顺序列,你可以使用Link

C#

var q = from c in this.DataGridView1.Columns.Cast<DataGridViewColumn>()orderby c.DisplayIndex select c; 
foreach (DataGridViewColumn column in q) 
{ 
    if (column.Visible == true) 
    { 
    Console.WriteLine(column.HeaderText.ToString()); 
    } 
} 

VB.Net

Dim q = From c In Me.DataGridView1.Columns.Cast(Of DataGridViewColumn)() Order By c.DisplayIndex Select c 
For Each column In q 
     If column.Visible Then 
      Console.WriteLine(column.HeaderText.ToString()) 
     End If 
Next 
+0

这是正确的答案。谢谢克里斯! – Josef

0

您可以设置单个列的DisplayIndex属性。

+0

我已经尝试过,但结果相同。 – Josef

0

我想你是误会了如何使用DisplayIndex财产在你的具体情况,试试这个

for (int i = 0; i <= dgAnalyse.Columns.Count - 1; i++) 
      { 
       if (dgAnalyse.Columns[i].Visible == true) 
       { 
        Console.WriteLine(dgAnalyse.Columns[dgAnalyse.Columns[i].DisplayIndex].HeaderText); 
       } 
      }