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);
        }
    }
}

按钮 1 生成列,按钮 2 添加列并将序号设置为 0,因此它应该在网格中排在第一位,按钮 3 显示列的序号并显示它们在DataTable.

4

3 回答 3

11

这就是DataGridView工作原理;启用自动生成列后,额外的(未映射的)列将附加到末尾。您可以解绑并重新绑定以修复它;将 DataSource 设置为 null 并返回到表中:

this.dataGridView1.DataSource = null;
this.dataGridView1.Columns.Clear();
this.dataGridView1.DataSource = data;
于 2009-01-31T18:49:17.727 回答
2

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

dgvData.Columns["COLUMN_NAME"].DisplayIndex = 0;  // will move your custom column to first position
于 2013-07-03T10:33:30.390 回答
0

不要忘记打开和关闭 AutoColumnCreate 以确保您是 DisplatIndex 的工作。

http://www.internetworkconsulting.net/content/datadridview-displayorder-not-working

于 2013-10-01T18:34:08.677 回答