Autor Beitrag
mats74
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Fr 16.09.11 11:49 
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:
ausblenden C#-Quelltext
1:
DataGridViewColumn column = new DataGridViewComboBoxColumn();					

Danach erstelle ich Array für die Dropdownlisteneinträge:
ausblenden 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:
ausblenden C#-Quelltext
1:
row1.Cells[1]... // Hier müsste das Array eingefügt werden					

Wie bringe ich die Array-Einträge in die Dropdownliste der jeweiligen DataGridViewComboBoxColumn-Zelle?

Gruss
mats74
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4807
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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
ausblenden C#-Quelltext
1:
2:
DataGridViewColumn column = new DataGridViewComboBoxColumn();
column.Items.AddRange(new string[] {"H","a","l","l","o"});
mats74 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

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

Für diesen Beitrag haben gedankt: mats74
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4807
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 16.09.11 13:48 
Hallo mats74,

jetzt habe ich deine Frage - glaube ich - verstanden. ;-)

Du brauchst einfach einen Cast auf DataGridViewComboBoxCell:
ausblenden C#-Quelltext
1:
2:
3:
DataGridViewComboBoxCell cell = row1.Cells[1as DataGridViewComboBoxCell;
if(cell != null)
  cell.Items.AddRange(new string[] {"H","a","l","l","o"}); // bzw. individuell je nach Zelle


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).

Für diesen Beitrag haben gedankt: mats74
mats74 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
row1.Cells[1].Value = cell; // Funktioniert logischerweise nicht (Typenkonflikt)					

Was mach ich nun mit der lokalen Variable cell?

Gruss
mats74
mats74 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: 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