Entwickler-Ecke
WinForms - DataGridViewComboBoxColumn Dropdownliste erstellen
mats74 - Fr 16.09.11 11:49
Titel: DataGridViewComboBoxColumn Dropdownliste erstellen
Hallo zusammen
Ich arbeite zum ersten Mal mit einer DataGridViewComboBoxColumn und habe da eine anfängerliche Frage.
Ich erstelle also ein Dgv mit einer DataGridViewComboBoxColumn-Spalte:
C#-Quelltext
1:
| DataGridViewColumn column = new DataGridViewComboBoxColumn(); |
Danach erstelle ich Array für die Dropdownlisteneinträge:
C#-Quelltext
1: 2:
| DataGridViewComboBoxCell cell = new DataGridViewComboBoxCell(); cell.Items.AddRange(new string[] {"H","a","l","l","o"}); |
Das Dgv wird nun mit einer foreach-Schleife mit Daten aus einer XML-Datei mit Zeilen befüllt.
Und nun meine einfache Frage:
Wie bringe ich die Array-Einträge in die Dropdownliste der jeweiligen DataGridViewComboBoxColumn-Zelle?
Gruss
mats74
Th69 - Fr 16.09.11 12:19
Hallo mats74,
wenn du für alle Zellen dieser Spalte dieselben ComboBox-Einträge haben möchtest, dann fülle einfach die DataGridViewComboBoxColumn.Items
C#-Quelltext
1: 2:
| DataGridViewColumn column = new DataGridViewComboBoxColumn(); column.Items.AddRange(new string[] {"H","a","l","l","o"}); |
mats74 - Fr 16.09.11 13:23
Hallo Th69
... leider nein.
Die Dropdownliste enthält in jeder Zelle ander Werte (gemäss den XML-Einträgen der entsprechenden Dateien).
Ich muss also die Dropdownliste in jeder Zelle neu erstellen.
Die Werte können also nicht aus dem CellTemplate der Column erstellt werden.
Ansonsten würde dies natürlich funktionieren.
Gruss
mats74
Ralf Jansen - Fr 16.09.11 13:46
Ich würde nicht für vielleicht tausende Zellen die Dropdown Liste vorbereiten wenn ich davon ausgehen kann das der User die vermutlich nie öffnet. Darum würde ich die Dropdownliste erst füllen wenn der User sie auch tatsächlich benötigt. Das ginge vermutlich zum Beispiel aus dem EditingControlShowing Event heraus.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| private void meinLiebesDataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { ComboBox cb = e.Control as ComboBox; if (cb!= null) { column.Items.AddRange(new string[] {"H","a","l","l","o"}); } } |
Th69 - Fr 16.09.11 13:48
Hallo mats74,
jetzt habe ich deine Frage - glaube ich - verstanden. ;-)
Du brauchst einfach einen Cast auf DataGridViewComboBoxCell:
C#-Quelltext
1: 2: 3:
| DataGridViewComboBoxCell cell = row1.Cells[1] as DataGridViewComboBoxCell; if(cell != null) cell.Items.AddRange(new string[] {"H","a","l","l","o"}); |
P.S. An das EditingControlShowing hatte ich auch erst gedacht, aber irgendwo müßten ja die verschiedenen Daten trotzdem hinterlegt sein, um sie dann nachträglich korrekt zu füllen (d.h. individuell je nach Zelle).
mats74 - Fr 16.09.11 14:09
Hallo Ralf und Th69
Wegen dem EditingControlShowing-Event muss ich Th69 recht geben.
Zu einem späteren Zeitpunkt müsste ich die (richtige) XML-Datei nachladen oder die Daten in einem Speichercontrol des Threads verwalten.
Das scheint mir doch zu aufwendig für ein Bisschen "Dropdownlisteneinträge laden".
Zu Deinem Vorschlag Th69:
C#-Quelltext
1:
| row1.Cells[1].Value = cell; |
Was mach ich nun mit der lokalen Variable cell?
Gruss
mats74
mats74 - Fr 16.09.11 14:21
Hallo Th69
Sorry, für meine Rückfrage.
Zuerst sollte man sich überlegen was ein Cast ist! :oops:
Dein Vorschlag ist also absolut korrekt und funktioniert tip top.
Ich danke euch beiden, ihr habt mir wirklich geholfen :D .
Gruss
mats74
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!