2009-01-31 10 views
7

Quando l'applicazione viene eseguita, lo DataGridView è associato a un DataTable. Successivamente aggiungo più colonne allo DataTable a livello di codice e si riflettono nei dati sottostanti, cioè gli ordinali della colonna sono come dovrebbero essere. Tuttavia ciò non si riflette nello DataGridView. Invece le colonne sono aggiunte al set originariamente generato.Modifica dell'ordine delle colonne in DataTable associato a DataGridView non riflette nella vista

Questo esempio dimostra,

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

Pulsante 1 genera le colonne, pulsante 2 aggiunge una colonna e imposta l'ordinale 0 quindi dovrebbe essere in prima griglia, pulsante 3 visualizza gli ordinali delle colonne e mostra come dovrebbero essere nel DataTable.

risposta

9

È così che funziona DataGridView; con colonne generate automaticamente, le colonne extra (non mappate) vengono aggiunte alla fine. Puoi separare e ri-legare per risolverlo; impostare il DataSource su null e tornare al tavolo:

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

Ho avuto un problema simile e risolto con la proprietà DataGridViewColumn.DisplayIndex.

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