5

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

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

sortedColumnNames.Sort();

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

sortedColumnNames: athens crete corfu kefalonia mykonos rhodes santorini skiathos zante

4

3 回答 3

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++;
    }
}
于 2008-12-08T01:27:25.253 回答
0

你可以这样做:

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

这并不理想,但它有效。

于 2008-12-09T11:38:03.273 回答
0

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

于 2008-12-08T01:21:33.753 回答