2009-01-31 8 views
7

Wenn die Anwendung ausgeführt wird, ist DataGridView an eine DataTable gebunden. Später füge ich programmatisch mehr Spalten zu DataTable hinzu und es spiegelt sich in den zugrunde liegenden Daten wider - d. H. Die Spalte Ordinalzahlen sind so, wie sie sein sollten. Dies spiegelt sich jedoch nicht in der DataGridView wider. Stattdessen werden Spalten an die ursprünglich generierte Menge angehängt.Ändern der Spaltenreihenfolge in DataTable, die an DataGridView gebunden sind, spiegelt sich nicht in der Ansicht

Dieses Beispiel zeigt,

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

Button 1 erzeugt die Spalten, Taste 2 eine Spalte hinzufügt und setzt die Ordinalzahl auf 0, so sollte sie in dem Gitter, die Taste 3 zeigt die Ordinalzahlen der Säulen ersten und zeigt, wie sie in der DataTable sein sollen.

Antwort

9

So funktioniert DataGridView funktioniert; Wenn Spalten automatisch aktiviert sind, werden zusätzliche (nicht zugeordnete) Spalten an das Ende angehängt. Sie können die Bindung lösen und neu binden, um sie zu beheben. die Datasource in die Tabelle auf null und zurück:

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

Ich hatte ein ähnliches Problem und löste es mit der DataGridViewColumn.DisplayIndex Eigenschaft.

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