C# 在DataGridView中对列重新排序

C# 在DataGridView中对列重新排序,c#,datagridview,C#,Datagridview,我正在通过代码填充DataGridView(Winforms),并从DataTable中选择行。此外,重新排序列的属性也设置为true 如果我对列进行重新排序,并且希望获得列的新顺序,则顺序始终相同。这意味着如果第一列名为“ID”,最后一列名为“Price”,则移动ID而不是Price,如果我想使用此代码列出列: for (int i = 0; i <= dgAnalyse.Columns.Count - 1; i++) {

我正在通过代码填充
DataGridView
(Winforms),并从
DataTable
中选择行。此外,重新排序列的属性也设置为true
如果我对列进行重新排序,并且希望获得列的新顺序,则顺序始终相同。这意味着如果第一列名为
“ID”
,最后一列名为
“Price”
,则移动
ID
而不是
Price
,如果我想使用此代码列出列:

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

for(int i=0;i您可以设置各个列的属性。

我认为您误解了在您的特定情况下如何使用
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);
                }
            }
for(int i=0;i
如果我对列进行重新排序,并希望获得列的新顺序
总是一样的

使用
DataGridView.AllowUserToOrderColumns
功能在运行时更改列的顺序时,不会更改
DataGridView.columns
集合的顺序。只会更改列的属性

如果要按显示顺序迭代列,可以使用
链接

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