1

我正在DataGridView通过代码填充(Winforms)并从DataTable. 重新排序列的属性也设置为 true。
如果我重新排序列并且我想获得新的列顺序,则顺序总是相同的。这意味着如果第一列被命名"ID",最后一列被命名"Price",通过移动ID代替PricePrice代替,ID如果我想使用这段代码列出列:

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

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

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

4

3 回答 3

1

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

于 2013-08-07T11:00:34.477 回答
1

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

当您在运行时使用该 DataGridView.AllowUserToOrderColumns功能更改列的顺序时,它不会更改DataGridView.Columnscollection的顺序。只是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
于 2013-08-07T13:21:58.020 回答
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);
                }
            }
于 2013-08-07T12:44:39.020 回答