【发布时间】:2018-04-19 13:09:08
【问题描述】:
我有一个 DataTable 设置为 DataGridView 的 DataSource。我像这样在特定索引处向 DataTable 添加一列;
DataSource.Columns.Add(columnName).SetOrdinal(index);
但是,用户界面会显示添加到末尾的新列(即一直到右侧)。当断点进入并仔细查看时,我可以看到我的 DataTable 和 DataGridView 项目都在正确的位置索引了新列。这对我来说没有意义,因为我在 UI 中查看的是 DataGridView。
我已尝试执行以下两项操作来刷新 DataSource,但正如我所说,调试时我可以看到 DataGridView 在正确的索引处有新列。它只是不显示 AT 这个索引。
DataGrid.Refresh();
DataGrid.Update();
更新
看起来尚未更新的字段是 DisplayIndex。我在这里遗漏了一个步骤,还是只需要在添加列时手动更新此索引?我假设 DataTable DataSource 也会覆盖 DisplayIndex?
更新 2
看起来很老套,但这很有效。如果有更好的方法,我仍然会感兴趣。
private void ensureOrdering()
{
foreach (DataGridViewColumn col in dgvData.Columns)
{
col.DisplayIndex = col.Index;
}
}
MCVE
在表单上有一个DataGridView 和一个Button,如果您在表单的Load 事件中添加一些列并将DataGridView 绑定到表,然后在按钮的Click 事件中插入另一列,您将看到该列将显示在列列表的末尾:
DataTable dt = new DataTable();
private void Form1_Load(object sender, EventArgs e)
{
dt.Columns.Add("X");
dt.Columns.Add("Y");
this.dataGridView1.DataSource = dt;
}
private void button1_Click(object sender, EventArgs e)
{
dt.Columns.Add("Z").SetOrdinal(0);
}
【问题讨论】:
-
这篇最近的帖子有同样的问题:Add column to DataGridView (VB.NET)。但是就像那个问题一样,发布的代码也不会为我们重现问题。尝试用最少的代码在新项目中重新创建问题。
-
我可以确认问题并为需要minimal reproducible example的人添加了MCVE。
标签: c# .net winforms datagridview datatable