Benutzer mit den meisten Antworten
DataGridView und ComboBox

Frage
-
Hallo Leute,
ich fülle eine DataGridViewComboBox mittels:
For Each myObject as CmyObject in MyObjektArray
.Add(myObject)
nextWenn ich nun in einer DataGriedView-Zeile auf die ComboBox klicke, dann wird mir auch bei jedem Eintrag unterhalb der ComboBox der Text angezeigt, der durch die ToString-Methode innerhalb der Klasse CmyObject erzeugt wird. Ich kann auch einen Eintrag aus der ComboBox selektieren.
Wenn ich jedoch den Focus von dieser DGV-ComboBox wegbringe, dann bekomme ich die Fehlermeldung: "Der DataGridViewCellBox-Wert ist ungültig"Es funktioniert aber, wenn ich die ComboBox so fülle:
For Each myObject as CmyObject in MyObjektArray
.Add(myObject.ToString)
nextIch möchte aber trotzdem, dass ich der ComboBox die Objekte selbst halte und nicht nur noch die Texte der ToString-Methode.
Wie geht das?
Vielen Dank im VorausChristian Tauschek
Antworten
-
Hallo Christian,
die ComboBox der DataGridVieComboBoxColumn hat per
Default immer den DropDownStyle = DropDownList. Man
kann sich zwar einen Verweis auf die ComboBox holen und
dieser dann den DropDownStyle = DropDown verpassen,
was aber nichts am Verhalten der ComboBoxColumn ändert,
sprich von der DropDownListe abweichende Werte werden
dennoch nicht übernommen.Wenn Du eine entspr. Funktionalität brauchst, kannst Du entweder
das DataGrid, wie in meinem Beispielwww.gssg.de -> Visual Basic -> VB.net
-> DataGrid
-> DataGridComboBoxColumngezeigt verwenden, oder Du musst Dir selbst eine entspr.
DataGridViewTextBoxColumn bauen.Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort markiert Christian Tauschek Freitag, 8. Oktober 2010 13:28
Alle Antworten
-
Hallo Christian,
ich fülle eine DataGridViewComboBox mittels:
For Each myObject as CmyObject in MyObjektArray
.Add(myObject)
nextDas sagt leider nichts darüber, wo in Deinem Code
Du dieses MyObjektArray befüllst und wie und wo
Deine DataGridViewComboBoxColumn an diese
gebunden wird.Wenn ich nun in einer DataGriedView-Zeile auf die ComboBox
klicke, dann wird mir auch bei jedem Eintrag unterhalb der
ComboBox der Text angezeigt, der durch die ToString-Methode
innerhalb der Klasse CmyObject erzeugt wird. Ich kann auch
einen Eintrag aus der ComboBox selektieren.
Wenn ich jedoch den Focus von dieser DGV-ComboBox
wegbringe, dann bekomme ich die Fehlermeldung:
"Der DataGridViewCellBox-Wert ist ungültig"
Es funktioniert aber, wenn ich die ComboBox so fülle
For Each myObject as CmyObject in MyObjektArra
.Add(myObject.ToString
next
Ich möchte aber trotzdem, dass ich der ComboBox die
Objekte selbst halte und nicht nur noch die Texte der
ToString-Methode.
Wie geht das?Unter
www.gssg.de -> Visual Basci -> VB.net
-> DataGridView
-> DataGridViewComboBoxColumngibt es ein Beispiel für ein DGV mit DataGridViewComboBoxColumn.
Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort markiert Christian Tauschek Mittwoch, 6. Oktober 2010 12:18
- Tag als Antwort aufgehoben Christian Tauschek Mittwoch, 6. Oktober 2010 20:50
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Donnerstag, 7. Oktober 2010 11:59
-
Hallo Peter,
danke für deine Antwort. (Hat soweit geklappt)
Ich habe aber noch eine Frage zu einer DGV mit einer ComboBoxSpalte unabhängig zu deinem Bespiel.
Angenommen ich habe ein DGV mit einer ComboBoxSpalte, deren ComboBox-Auswahl mit Strings gefüllt ist:
zB.:
"Text1"
"Text2"
Wenn ich nun aber bei diesem DGV eine neue Zeile hinzufüge mittels myDGV.Rows.Add("andererText"), dann sollte doch in dieser neuen ComboBox-Zelle der Text "andererText" erscheinen. Ich bekomme aber beim Hinzufügen die Fehlermeldung, dass der ComboBoxCell-Wert ungültig ist.
Mit der ComboBox-Auswahl sollte dann aber trotzdem die Auswahl zwischen "Text1" und "Text2" möglich sein und somit "andererText" ersetzen.
Der Datentyp (String) ist aber richtig eingestellt.
Wie kann ich das lösen? (Eigentlich müsste man das DropDownStyle der ComboBox von "DropDownList" auf "DropDown" umstellen, damit auch Werte in der Zelle dargestellt werden können, die nicht in der ComboBox-Auflistung vorkommen - oder?)
mfgChristian
-
Hallo Christian
Hallo Peter,
danke für deine Antwort. (Hat soweit geklappt)
Ich habe aber noch eine Frage zu einer DGV mit einer
ComboBoxSpalte unabhängig zu deinem Bespiel.
Angenommen ich habe ein DGV mit einer ComboBoxSpalte,
deren ComboBox-Auswahl mit Strings gefüllt ist:Wie, wo, wann (Code) füllst Du diese CombBoxSpalte mit Strings?
zB.:
"Text1"
"Text2"
Wenn ich nun aber bei diesem DGV eine neue Zeile hinzufüge
mittels myDGV.Rows.Add("andererText"), dann sollte doch in
dieser neuen ComboBox-Zelle der Text "andererText" erscheinen.Nein, weil "anderer Text" nicht in der DropDownListe der
ComboBox steht und somit ein unzulässiger Wert ist.Ich bekomme aber beim Hinzufügen die Fehlermeldung, dass
der ComboBoxCell-Wert ungültig ist.Gültig sind nur Werte, die in der DropDownListe der Combobox
stehen.Mit der ComboBox-Auswahl sollte dann aber trotzdem die Auswahl
zwischen "Text1" und "Text2" möglich sein und somit "andererText"
ersetzen.
Der Datentyp (String) ist aber richtig eingestellt.Mit dem DatenTyp hat das nichts zu tun.
Wie kann ich das lösen? (Eigentlich müsste man das DropDownStyle
der ComboBox von "DropDownList" auf "DropDown" umstellen,und genau das ist nicht möglich.
Die ComboBox einer DataGridViewComboBoxColumn hat
immer den DropDownStyle = DropDownList.damit auch Werte in der Zelle dargestellt werden können,
die nicht in der ComboBox-Auflistung vorkommen - oder?)Da müsstest Du Dir eine eigene ComboBoxColumn mit einer
entspr. "variableren" ComboBox bauen.
Für das DataGrid habe ich mal so eine ComboBoxColumn
erstellt, bei der man den DropDownstyle wie bei einer
normalen ComboBox wählen kann. Du findest das im
Beispiel unterwww.gssg.de -> Visual Basic -> VB.net
-> DataGrid
-> DataGridComboBoxColumnGruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen) -
Hallo Peter,
dein Beispiel baut auf einem DataGrid auf und nicht auf einem DGV.
Habe zufällig heute gesehen, dass du bei einem Posting (im Vorjahr) auf die fast gleiche Frage folgende Antwort gegeben hast:---------------------------------------------------------------------
Hallo Martin,
> Kann man das DataGridViewComboBoxColumn nicht
> auf die DropDownStyle "DropDown" setzen?
Die in dieser Column gehostete ComboBox kann man
zwar auf DropDownStyle = DropDown setzen, was aber
alleine nicht genügt, da die Zellen in dieser Spalte die
abweichenden Werte dennoch nicht übernehmen.
Bisher ist es mir nicht gelungen mit dem DGV eine
mit halbwegs vertretbarem Aufwand erzielbare
Lösung zu finden. Mit dem DataGrid lässt sich
das leichter realisieren und macht von der Optik
keinen Unterschied.
---------------------------------------------------------------------
Ist das jetzt auch noch aktuell, denn ich möchte trotzdem unbedingt beim DGV bleiben?
mfg
Christian
-
Hallo Christian,
die ComboBox der DataGridVieComboBoxColumn hat per
Default immer den DropDownStyle = DropDownList. Man
kann sich zwar einen Verweis auf die ComboBox holen und
dieser dann den DropDownStyle = DropDown verpassen,
was aber nichts am Verhalten der ComboBoxColumn ändert,
sprich von der DropDownListe abweichende Werte werden
dennoch nicht übernommen.Wenn Du eine entspr. Funktionalität brauchst, kannst Du entweder
das DataGrid, wie in meinem Beispielwww.gssg.de -> Visual Basic -> VB.net
-> DataGrid
-> DataGridComboBoxColumngezeigt verwenden, oder Du musst Dir selbst eine entspr.
DataGridViewTextBoxColumn bauen.Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort markiert Christian Tauschek Freitag, 8. Oktober 2010 13:28