如何按字母顺序对数据网格中的列标题进行排序?C#

5 c# datagridview winforms

我有一个包含列标题的排序列表,如何重新排列 datagridview 使其与排序列表的顺序相同?

我已经尝试了下面的代码,但这并不总是有效,有些列没有正确排序。感谢您对此的任何帮助。

sortedColumnNames.Sort();

    foreach (DataGridViewColumn col in dataGridView1.Columns)
                    {
                        col.DisplayIndex = sortedColumnNames.IndexOf(col.HeaderText);
                    }
Run Code Online (Sandbox Code Playgroud)

sortedColumnNames: 雅典克里特科孚岛凯法利尼亚岛米科诺斯罗德岛圣托里尼斯基亚索斯桑特岛

Rob*_*ney 5

我不知道您的问题是否SortedColumnNames是排序不正确(事实并非如此),或者是否为列分配的顺序与列表中显示的顺序不同。

如果是后者,它可以想见是因为您正在修改的集合中的项目的顺序,你迭代超过它。尽管我在运行的任何测试中都没有看到这种情况发生。

作为一般规则,我不会弄乱我正在迭代的集合的成员资格顺序。我以这种方式实现列排序:

void SortDataGridViewColumns(DataGridView dgv)
{
    var list = from DataGridViewColumn c in dgv.Columns
               orderby c.HeaderText
               select c;

    int i = 0;
    foreach (DataGridViewColumn c in list)
    {
        c.DisplayIndex = i++;
    }
}
Run Code Online (Sandbox Code Playgroud)


BFr*_*ree 0

看起来应该可行。我刚刚编写了一个快速应用程序来测试,它运行良好。您能准确地确定它何时工作、何时不工作吗?当你说它们不起作用时,是否总是相同的列乱序?