我以编程方式在 DataGridView 中插入一列(即,未绑定到任何数据表/数据库),如下所示:
int lastIndex = m_DGV.Columns.Count - 1; // Count = 4 in this case
DataGridViewTextBoxColumn col = (DataGridViewTextBoxColumn)m_DGV.Columns[lastIndex];
m_DGV.Columns.RemoveAt(lastIndex);
m_DGV.Columns.Insert(insertIndex, col); // insertIndex = 2
我发现有时使用这种方法我的列在视觉上是乱序的。一种解决方法是事后手动设置列的 DisplayIndex 属性。添加此代码“修复它”,但我不明白它为什么会这样。
Console.Write(m_DGV.Columns[0].DisplayIndex); // Has value of 0
Console.Write(m_DGV.Columns[1].DisplayIndex); // Has value of 1
Console.Write(m_DGV.Columns[2].DisplayIndex); // Has value of 3
Console.Write(m_DGV.Columns[3].DisplayIndex); // Has value of 2
col.DisplayIndex = insertIndex;
Console.Write(m_DGV.Columns[0].DisplayIndex); // Has value of 0
Console.Write(m_DGV.Columns[1].DisplayIndex); // Has value of 1
Console.Write(m_DGV.Columns[2].DisplayIndex); // Has value of 2
Console.Write(m_DGV.Columns[3].DisplayIndex); // Has value of 3
顺便说一句,我的网格可以动态增加其列数。我想以块的形式增长它,所以每个插入不需要列分配(和相关的初始化)。然后将通过从末尾抓取未使用的列,将其插入所需位置并使其可见来添加每个“新”列。