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

DisplatIndex の作業を確実にするために、AutoColumnCreate をオンまたはオフにすることを忘れないでください。

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

于 2013-10-01T18:34:08.677 に答える