2013-08-07 87 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); 
       } 
      }