2016-04-07 15 views
1

Ich habe DataGridView, die eine var Sammlung hat, die sich aus einem LINQjoin zwischen zwei Datenbankobjekten ergibt. Ich wähle nur bestimmte Spalten aus dem resultierenden Join und füttere es als DataSource -Eigenschaft an meine DataGridView. Die Metadaten meines DataGridView sind an die Spalten des Objekts var angepasst und übernehmen zur Laufzeit die Formatierung.
Das Problem ist, wenn ich den Inhalt löschen und neue var mit meinem join Ergebnis einspeisen muss. Wenn ich DataGridView.DataSource = null code ich werde den Inhalt löschen, aber auch Metadaten zerstören. Das nächste Mal, wenn ich meine var Sammlung füttere, wird die Formatierung alles durcheinander gebracht.
Die Frage ist, wie Sie Daten gebundene DataGridView Inhalt löschen und seine ursprünglichen Metadaten beibehalten? Ich denke, ich könnte leere var Sammlung nach meinem verbundenen Objekten füttern, aber gibt es eine native DataGridView Methode, die den Inhalt löschen und Spaltenstruktur beibehalten würde?DataGridView-Metadaten nach dem Löschen von DataSource beibehalten

Antwort

1

Wenn Sie Spalten für Ihre DataGridView definieren und AutoGenerateColumns-false dann das Raster zeigt nur die Spalten, die Sie definiert haben. Auch nachdem Sie DataSource auf null gesetzt haben, bleiben Spalten erhalten.

Beispiel:

Im folgende Beispiel, das Raster zeigt nur Property1 und Property2 im Raster. Wenn Sie die Datenquelle auf null setzen, behält das Raster die Spalten bei.

var column1 = new DataGridViewTextBoxColumn(); 
column1.DataPropertyName = "Property1"; 
column1.HeaderText = "Column1"; 

var column2 = new DataGridViewTextBoxColumn(); 
column2.DataPropertyName = "Property2"; 
column2.HeaderText = "Column2"; 

this.dataGridView1.Columns.Add(column1); 
this.dataGridView1.Columns.Add(column2); 

this.dataGridView1.AutoGenerateColumns = false; 
this.dataGridView1.DataSource = Enumerable.Range(1, 10) 
              .Select(x => new 
              { 
               Property1 = x, 
               Property2 = x, 
               Property3 = x 
              }).ToList(); 
+1

Dies ist die Antwort, die ich gesucht habe! Hat super funktioniert. Lustig, ich habe deinen Beitrag gelesen, kurz nachdem ich die Methode mit leeren Quellen benutzt hatte, hehe, jetzt habe ich zwei Möglichkeiten, diese Kontrolle zu löschen, aber deine ist mehr RAM-freundlich. – ArtK

1

Versuchen

dataGridView1.Rows.Clear(); 
Verwandte Themen