Entwickler-Ecke

WinForms - Comboboxen in Gridview aufeinander abstimmen


haschme - Do 04.08.16 11:18
Titel: Comboboxen in Gridview aufeinander abstimmen
Hallo zusammen,

ich wollte mal fragen ob es möglich ist in einer DataGridView 2 ComboBoxspalten aufeinander abzustimmen.

Angenommen ich habe ein Datagridview mit 2 Spalten. Beides sind Comboboxspalten.

Falls ein bestimmter Itemindex einer Combobox der ersten Spalte erreicht wird
soll die Combobox der 2.Spalte enabled oder visible gemacht werden (eins von beiden).

Ändert sich der Itemindex der Combobox in Spalte 1 wieder so ändert sich auch der Status(visible oder enable) der Combobox in Spalte 2

Vielen Dank!


Ralf Jansen - Do 04.08.16 12:45

Du könntest in einem passenden Event (vermutlich wäre CellEnter das passende) die Spalte auf ReadOnly setzen.


C#-Quelltext
1:
2:
3:
4:
private void myLovelyDatagrid_CellEnter(object sender, DataGridViewCellEventArgs e)
{
            myLovelyDatagrid.Columns[1].ReadOnly = (myLovelyDatagrid.Rows[e.RowIndex].Cells[0].Value) == MyLovelyRelevantItemIndex); // halt die Bedingung die du prüfen willst
}


haschme - Mi 10.08.16 10:57

Danke für deine Hilfe

Also mit deinem Codeauszug hätte es auch geklappt, jedoch ist mir aufgefallen, dass es manchmal recht lange dauerte
bis die Comboboxen den gewünschten Effekt erzielten.

Daher habe ich nochmal geschaut welche Alternativen es gibt.

Falls jemand Anderes mal das selbe Problem hat, so bin ich vorgegangen:

Für mein Unterfangen habe ich letzendlich die beiden Datagridview-Events:
CurrentCellDirtyStateChanged und CellValueChanged
verwendet.

Als Grundlage dafür habe ich die Methodik auf diesem Link angewendet: (1. Antwort auf die oben genannte Frage)

http://stackoverflow.com/questions/5652957/what-event-catches-a-change-of-value-in-a-combobox-in-a-datagridviewcell

Im Nachhinein fiel mir noch auf, dass die DataGridViewComboBox-Objekte leider keine Enable Eigenschaft aufweisen..
Selbst ausgrauen funktioniert nicht richtig. Habe schonmal im worldwideweb geschaut was es so für Möglichkeiten gibt das ganze zu enablen. Allerdings muss man dafür die Objekte wohl selber im OnPaint zeichnen.. Das macht kein Spaß.

Falls zufällig jemand ne bessere alternative kennt würde ich mich sehr freuen wenn idese geteilt wird ;-)

Danke

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Ralf Jansen - Mi 10.08.16 11:12

Zitat:
Selbst ausgrauen funktioniert nicht richtig. Habe schonmal im worldwideweb geschaut was es so für Möglichkeiten gibt das ganze zu enablen. Allerdings muss man dafür die Objekte wohl selber im OnPaint zeichnen. Das macht kein Spaß.


Ausgrauen wäre auch irgendwie falsch. Ausgrauen der nicht editierbaren Elemente wäre ja definitiv zellenbezogen und nicht mehr Column bezogen. Bei deiner ursprünglichen Frage reichte es die Column zu betrachen.

Das zeichnen sollte ziemlich einfach sein. In CellPainting ermitteln ob diese Zelle enabled/disabled ist und zum zeichnen dann denn TextBoxRenderer oder ComboBoxRenderer verwenden.