C# 更改绑定到DataGridView的DataTable中的列顺序不会反映在视图中

C# 更改绑定到DataGridView的DataTable中的列顺序不会反映在视图中,c#,.net,winforms,datagridview,datatable,C#,.net,Winforms,Datagridview,Datatable,当应用程序运行时,DataGridView被绑定到一个DataTable。稍后,我以编程方式将更多列添加到DataTable,并将其反映在基础数据中,即列序号与它们应该的一样。但是,DataGridView中没有反映这一点。而是将列附加到最初生成的集合上 这个例子说明, public partial class Form1 : Form { public Form1() { InitializeComponent(); } public Data

当应用程序运行时,
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:表单
{
公共表格1()
{
初始化组件();
}
公共数据表数据=新数据表();
私有无效按钮1\u单击(对象发送者,事件参数e)
{
this.dataGridView1.DataSource=数据;
对于(int i=0;i<5;i++)
{
this.data.Columns.Add(i.ToString());
}
}
私有无效按钮2\u单击(对象发送者,事件参数e)
{
DataColumn foo=新的DataColumn();
this.data.Columns.Add(foo);
foo.SetOrdinal(0);
}
私有无效按钮3\u单击(对象发送者,事件参数e)
{
foreach(this.data.Columns中的数据列tmpCol)
{
WriteLine(“{0}:{1}”,tmpCol.ColumnName,tmpCol.Ordinal);
}
}
}

按钮1生成列,按钮2添加一列并将序号设置为0,使其位于网格中的第一位,按钮3显示列的序号并显示它们在
数据表中的显示方式,这正是
DataGridView
的工作方式;启用“自动生成列”后,会将额外(未映射)列追加到末尾。您可以解除绑定并重新绑定以修复它;将数据源设置为null并返回到表:

this.dataGridView1.DataSource = null;
this.dataGridView1.Columns.Clear();
this.dataGridView1.DataSource = data;

我遇到了一个类似的问题,并使用DataGridViewColumn.DisplayIndex属性解决了这个问题

dgvData.Columns["COLUMN_NAME"].DisplayIndex = 0;  // will move your custom column to first position

不要忘记打开和关闭AutoColumnCreate,以确保显示索引的工作


请修复您的链接