我有一个显示摘要数据的DataGridView。它绑定到绑定到DataTable的BindingSource。根据用户选择的摘要类型,程序可能会将数据拆分为多个列。在我的代码中,我更新现有列并根据需要添加列。正如预期的那样,新列将添加到列表的末尾,并使用SetOrdinal重新定位它。但是,DataGridView永远不会移动列,除非我将DataSource空白并重新绑定到BindingSource,如下所示:
我使用以下代码添加列:
this.Columns.Add(newcolumn);
this.Columns[columnname].SetOrdinal(index++);
我刷新源代码如下:
teamstats.UpdateColumn(teamstats.Columns[columnClicked].ColumnName);
bsTBAstats.DataSource = null;
bsTBAstats.DataSource = teamstats;
这是有问题的,因为在刷新DataGridView之后,我必须为每个列重新应用我的格式(单元格和事件处理程序),这会显着减慢进程。
是否有更有效的方法让DataTable刷新列顺序?如果用户可以手动重新排序列,为什么我不能以编程方式进行排序?
答案 0 :(得分:0)
我发现完成上述问题的最佳方法是手动调用DataGridView中的列以匹配DataTable中列的顺序。以下代码显示了我使用的过程:
foreach (DataColumn c in teamstats.Columns)
dgvTBAstats.Columns[c.ColumnName].DisplayIndex = teamstats.Columns.IndexOf(c);
似乎绑定过程应该自动执行此操作,但这可行。不幸的是,如果用户手动重新排序列,则该顺序将丢失,因为相反的情况是正确的,并且DataTable不会重新排序以匹配DataGridView。
我似乎无法找到更好的方法来绑定列顺序。