2013-06-10 16 views
8

Nella mia applicazione, ho un DataGridView che è la fonte dei dati varia depening sul pulsante che si fa clic. E.G. Facendo clic su 'Bestseller' sarà:C# DataGridView Column Order

dataGridView1.DataSource = totalDownloads(); 

O i download per giocatore

dataGridView1.DataSource = playerDownloads(); 

Ogni metodo ottiene i dati tramite query SQL e restituisce un DataTable di queste informazioni.

Tuttavia, con il mio codice seguente:

dataGridView1.DataSource=getStats(); 
public DataTable getStats() 
    { 
     DataTable table1 = new DataTable("Totals"); 
     table1.Columns.Add("Park Name"); 
     table1.Columns.Add("Author"); 
     table1.Columns.Add("Total Downloads"); 
     table1.Columns[2].DataType = typeof(int); 
     table1.Columns.Add("Rating (Max 5)");   
     table1.Columns[3].DataType = typeof(float); 
     table1.Rows.Add(name,author,download, rating); 
     } 
     return table1; 
    } 

mi aspettavo di vedere le colonne nell'ordine: "Parco Name" "Autore" "Download totali" "Rating" Tuttavia, sono disponibili in "Download ", "Parco Name", "Autore", "Rating"

ho letto che l'aggiunta di: dataGridView1.AutoGenerateColumns = false; risolverà questo ... tuttavia, questo non fa nessuna differenza per l'ordine ...

grazie per l'aiuto!

risposta

13

Si tratta di un progetto WinForms o uno Asp.net?

Se si tratta di WinForms si dovrebbe essere in grado di cambiare l'ordine delle colonne vengono visualizzati in accedendo tuoi GridView Colonne DisplayIndex

dataGridView1.Columns["Park Name"].DisplayIndex = 0; // or 1, 2, 3 etc 
+1

Grazie per la risposta Mentre questo funziona ... Sono molto curioso perché non apparivano nel giusto ordine, in primo luogo. Ho usato DataGridView molto per progetti molto più grandi ma non l'ho mai provato prima .... – user1662290

+0

Sì, è interessante. Avrei pensato che avrebbero impostato l'ordine in cui sono aggiunti.Hai provato a riavviare/pulire completamente il progetto? Giusto per essere sicuro che nulla viene memorizzato nella cache. –

3

provare a giocare con l'indice di visualizzazione come questo

private void AdjustColumnOrder() 
{ 
    customersDataGridView.Columns["Park Name"].DisplayIndex = 0; 
    customersDataGridView.Columns["Author"].DisplayIndex = 1; 
    customersDataGridView.Columns["Total Downloads"].DisplayIndex = 2; 
} 
+1

Grazie Funziona ora – user1662290

0

Per me non ha fatto il trucco. Un'altra linea necessaria:

entityDataGridView.AutoGenerateColumns = false; 

saluti!

+0

Se si sta utilizzando un database, quasi sempre si vorrà impostarlo su true. –

7

La mia soluzione semplice alle colonne è fuori servizio è aggiungere questo ciclo che imposta il DisplayIndex allo Index.

foreach (DataGridViewColumn col in grid.Columns) { 
    col.DisplayIndex = col.Index; 
} 

Il Index è assegnato a ciascuna colonna che vengono aggiunti. Non sono sicuro del motivo per cui lo DisplayIndex non funzioni, ma lo script sopra lo risolverà.

0

Ho avuto lo stesso problema. Ho risolto con:

dataGridView.DataSource = null; 
dataGridView.DataSource = MyDataTable; 
1

Ho trovato questo molto utile.

Uso: ColumnDisplayOrder ("Nome parco, autore, download totali", myDataGridView);

private void ColumnDisplayOrder(string columnList, DataGridView gridView) 
    { 
     var columnListArray = columnList.Split(','); 
     for (var i = 0; i < columnListArray.Length; i++) 
     { 
      var gridViewColumn = gridView.Columns[columnListArray[i].Trim()]; 
      if (gridViewColumn != null) 
       gridViewColumn.DisplayIndex = i; 
     } 
    } 
+0

Questo è interessante. Dovrò provarlo qualche volta. –