DataTable绑定到DataGridView后更改列顺序不会在视图中反映出来。

8
当应用程序运行时,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);
        }
    }
}
生成列,添加一列并将序号设置为0,因此它应该是网格中的第一列,显示列的序号,并显示它们在DataTable中的正确顺序。
4个回答

11

这就是 DataGridView 的工作方式;启用自动生成列后,额外的(未映射的)列将附加在末尾。你可以解除绑定并重新绑定来修复它;将数据源设置为 null,然后再设置回表格:

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

3

我遇到了类似的问题,并通过使用DataGridViewColumn.DisplayIndex属性解决了它。

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

上面的解决方案在将dgv动态绑定到绑定数据源后提供了更精细的控制:BindingSource bindingSource = new BindingSource();dgvConciseView.AutoGenerateColumns = true;bindingSource.DataSource = new myDataClass() { T = 5, TR = 5, K = 0, t = 3, N = 3600 };dgvConciseView.DataSource = bindingSource;dgvConciseView.Columns["T"].DisplayIndex = 0; - Mark Ronollo

0

请修复您的链接。 - Red Hot Chili Coder

0
请看下面Koryu的回答!在将dgv动态绑定到绑定数据源后,下面的解决方案提供了更精细的控制。
BindingSource bindingSource = new BindingSource();
dgvData.AutoGenerateColumns = true;
bindingSource.DataSource = new myDataClass() { T = 5, TR = 5, K = 0, t = 3, N = 3600 };
dgvData.DataSource = bindingSource;
dgvData.Columns["T"].DisplayIndex = 0;    //******* Koryu's answer below

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接