【问题标题】:How can I sort the column headers in a datagrid alphabetically? c#如何按字母顺序对数据网格中的列标题进行排序? C#
【发布时间】:2008-12-08 00:34:44
【问题描述】:

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

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

sortedColumnNames.Sort();

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

排序的列名: 雅典 克里特岛 科孚岛 凯法利尼亚岛 米科诺斯 罗德 圣托里尼 斯基亚索斯 赞特

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    我不知道您的问题是否是 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++;
        }
    }
    

    【讨论】:

    • 这是我没想到的。林克。
    • 我的 DGV 标题文本实际上是 4 行高,需要按第 4 行排序,然后是第 2 行的子成员,然后是第 1 行。最后把 string.splits 和 int.parses 放在我的 orderby 中。是的,我知道——但我有一些可怕的要求。解决了我的问题;谢谢!
    • 这应该被标记为这个问题的“答案”。
    【解决方案2】:

    看起来应该可以。我刚刚编写了一个快速应用程序进行测试,它运行良好。你能确定它什么时候工作,什么时候不工作吗?当您说它们不起作用时,是否总是相同的列出现故障?

    【讨论】:

      【解决方案3】:

      你可以这样做:

      1. 将所有列添加到 List tmpColumns
      2. 从 dgv.Columns 中删除所有列
      3. 按名称对 tmpColumns 进行排序
      4. 将列从 tmpColumns 添加回 dgv.Columns,并将其 DisplayIndex 设置为下一个值 0、1、2 等等。

      这并不理想,但它确实有效。

      【讨论】:

      • 这个问题/答案帮助了我。您应该将答案归功于罗伯特·罗斯尼。
      • @MrCoincidence 如果我的回答对您有所帮助,为什么我要归功于其他用户?我不明白你的意思
      • Thomasz,我现在明白你的评论了。我最初的评论是对 OP 要求他们将问题的答案归功于您。很抱歉造成混乱。
      猜你喜欢
      • 1970-01-01
      • 2010-09-19
      • 2013-10-24
      • 1970-01-01
      • 2013-05-02
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多