2013-06-10 21 views
8

In meiner Anwendung habe ich eine DataGridView, deren Datenquelle je nach der Schaltfläche, auf die Sie klicken, variiert. E.G. Durch Klicken auf ‚Anzahl der Downloads‘ wird es sein:C# DataGridView Spaltenreihenfolge

dataGridView1.DataSource = totalDownloads(); 

Oder die Downloads pro Spieler

dataGridView1.DataSource = playerDownloads(); 

Jede Methode, um Daten über SQL-Abfrage erhält und gibt eine Datatable dieser Informationen.

jedoch mit meinem folgenden Code:

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

ich die colums in der Reihenfolge zu sehen erwartet: "Name des Parks" "Autor" "Total Downloads" "Rating" aber sie kommen in „Downloads "," Park Name "," Autor "," Bewertung "

Ich habe gelesen, dass das Hinzufügen: dataGridView1.AutoGenerateColumns = false; wird dies beheben ... aber das macht keinen Unterschied für die Bestellung überhaupt ...

danke für die Hilfe!

Antwort

13

Ist dies ein WinForms-Projekt oder ein Asp.net-Projekt?

Wenn es WinForms ist sollten Sie in der Lage sein, die Reihenfolge der Spalten ändern angezeigt in indem Sie Ihre Gridviews Spalten Zugriff auf Displayindex

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

Vielen Dank für Ihre Antwort Während dies funktioniert ... Ich bin sehr gespannt, warum sie in der richtigen Reihenfolge an erster Stelle nicht angezeigt wurden. Ich habe DataGridView viel für viel größere Projekte verwendet, aber ich habe noch nie zuvor erlebt .... – user1662290

+0

Ja, es ist interessant. Ich hätte gedacht, dass sie der Reihenfolge entsprechen würden, in der sie hinzugefügt wurden.Haben Sie einen kompletten Neustart/Reinigung des Projekts versucht? Nur um sicher zu sein, dass nichts zwischengespeichert wird. –

3

Versuche mit dem Display-Index wie diese

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

Danke Es funktioniert jetzt – user1662290

0

zu spielen Für mir war es nicht der Trick. Noch eine Zeile benötigt:

entityDataGridView.AutoGenerateColumns = false; 

Grüße!

+0

Wenn Sie eine Datenbank verwenden, dann werden Sie fast immer wollen dies auf wahr gesetzt werden. –

7

Meine einfache Lösung für die Spalten außer Betrieb ist, diese Schleife, die die DisplayIndex auf die Index setzt.

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

The Index wird, wenn sie hinzugefügt werden, zu jeder Spalte zugeordnet. Ich bin mir nicht sicher, warum die DisplayIndex wird außer Betrieb, aber das obige Skript wird es beheben.

0

Ich hatte das gleiche Problem. Ich löste mit:

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

Ich fand dies sehr hilfreich.

Verwendung: ColumnDisplayOrder ("Parkname, Autor, Gesamtdownloads", 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

Das ist interessant. Ich werde es irgendwann versuchen müssen. –