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

时间:2008-12-08 00:34:45

标签: c# winforms datagridview

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

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

sortedColumnNames.Sort();

    foreach (DataGridViewColumn col in dataGridView1.Columns)
                    {
                        col.DisplayIndex = sortedColumnNames.IndexOf(col.HeaderText);
                    }

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

3 个答案:

答案 0 :(得分:3)

我无法判断您的问题是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++;
    }
}

答案 1 :(得分:0)

似乎应该有用。我刚刚写了一个快速应用程序进行测试,它运行良好。你可以准确地确定它什么时候工作,什么时候不工作?如果你说它们不起作用,它是否总是与乱序的列相同?

答案 2 :(得分:0)

你可以这样做:

  1. 将所有列添加到List tmpColumns
  2. 从dgv.Columns
  3. 中删除所有列
  4. 按名称排序tmpColumns
  5. 将列从tmpColumns添加回dgv.Columns,并将DisplayIndex设置为下一个值0,1,2,依此类推。
  6. 这不太理想,但它确实有效。