运行应用程序时,DataGridView
绑定到DataTable
。稍后我以编程方式向DataTable
添加更多列,并将其反映在基础数据中 - 即,“正常”列应该是它们应该是的。但是这并没有反映在DataGridView
中。而是将列附加到最初生成的集合上。
此示例演示
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public DataTable data = new DataTable();
private void button1_Click(object sender, EventArgs e)
{
this.dataGridView1.DataSource = data;
for (int i = 0; i < 5; i++)
{
this.data.Columns.Add(i.ToString());
}
}
private void button2_Click(object sender, EventArgs e)
{
DataColumn foo = new DataColumn();
this.data.Columns.Add(foo);
foo.SetOrdinal(0);
}
private void button3_Click(object sender, EventArgs e)
{
foreach (DataColumn tmpCol in this.data.Columns)
{
Console.WriteLine("{0} : {1}", tmpCol.ColumnName, tmpCol.Ordinal);
}
}
}
按钮1生成列,按钮2添加一列并将序号设置为0,因此它应该在网格中首先显示,按钮3显示列的序数并显示它们应该在{{1 }}
答案 0 :(得分:10)
这就是DataGridView
的工作原理;启用自动生成列后,将额外(未映射)列附加到末尾。您可以取消绑定并重新绑定以修复它;将DataSource设置为null并返回到表:
this.dataGridView1.DataSource = null;
this.dataGridView1.Columns.Clear();
this.dataGridView1.DataSource = data;
答案 1 :(得分:2)
我遇到了类似的问题,并使用DataGridViewColumn.DisplayIndex属性解决了这个问题。
dgvData.Columns["COLUMN_NAME"].DisplayIndex = 0; // will move your custom column to first position
答案 2 :(得分:0)
不要忘记打开和关闭AutoColumnCreate以确保您的DisplatIndex工作。
http://www.internetworkconsulting.net/content/datadridview-displayorder-not-working