Entwickler-Ecke

WinForms - DataGridView mit ComboBox und NumericUpDown


DrHoas - Fr 08.01.16 08:10
Titel: DataGridView mit ComboBox und NumericUpDown
Hallo,

im Titel steht "DataGridView" aber vielleicht ist das ja gar nicht das richtige für mich. Folgendes möchte ich realisieren:
Ich brauche eine Tabelle. In der ersten Spalte stehen nur strings. In der zweite Spalte sind manche Zellen leer, manche enthalten eine ComboBox, andere ein NumericUpDown. Anbei ein Bild zum Verdeutlichen, wie es prinzipiell aussehen soll (hier mit einer ListBox).

Gibt es dafür eine einfache Möglichkeit?

Dank und Gruß

Philipp


Th69 - Fr 08.01.16 09:54

Hallo,

du müßtest ein eigenes Control erstellen, welche diese Funktionalität (wechselseitige Anzeige verschiedener Controls) bereitstellt und der DataGridView-Column zuordnen (auf Basis der IDataGridViewEditingControl-Schnittstelle [https://msdn.microsoft.com/de-de/library/system.windows.forms.idatagridvieweditingcontrol%28v=vs.110%29.aspx]).
Im DataGridView.EditingControlShowing-Ereignis [https://msdn.microsoft.com/de-de/library/system.windows.forms.datagridview.editingcontrolshowing%28v=vs.110%29.aspx] kannst du dann die Logik implementieren, das richtige dieser Controls auszuwählen und anzuzeigen.

Das Control DataGridViewComboBoxEditingControl kannst du ja einfach benutzen, nur für die NumericUpDown-Klasse [https://msdn.microsoft.com/de-de/library/system.windows.forms.numericupdown%28v=vs.110%29.aspx] müßtest du ein eigenes DataGridViewNumericUpDownEditingControl erstellen (analog zum CalendarEditingControl im Beispiel zu obigen Link).

Hier ein genereller Artikel dazu: Create a Custom DataGridView Column [http://www.codemag.com/article/0707061] (auch wenn dort ein eigenes Control per Paint gezeichnet wird).

Und evtl. noch als Anschauungsobjekt Hosten von Steuerelementen in DataGridView-Zellen - Parameterübergabe an EditingControl [http://www.mycsharp.de/wbb2/thread.php?threadid=109422].


Talemantros - Fr 08.01.16 10:39

Hallo Philipp,
ich weiß nicht wie fit du in C# bist, ich persönlich wäre mit dem eigenen Control schon völlig überfordert.
Mit meinen momentanen Kenntnissen käme für mich ein anderer Lösungsweg in Betracht.
Da dies für dich vielleicht auch so ist, wollte ich dir den mal hier schreiben.

Sollte dies nicht der Fall sein, kannst du ja meinen Eintrag überlesen und solange ich nichts völlig falsches schreibe, hoffe ich mal mich haut kein MOD :-)

Mir würde zu deiner Anfrage folgendes in den Sinn kommen.
Ich würde vermutlich Standard DataGridView nehmen zur Anzeige.
Daneben würde ich die entsprechenden Felder mit NumericUPDOWN und Textfelder etc. machen und diese über eine BindingSource verknüpfen, so dass wenn jemand im DGV eine Zeile auswählt die entsprechenden Controls zur Bearbeitung geladen werden.
Änderungen dort würden dann im DGV angezeigt werden.

Gruß


Ralf Jansen - Fr 08.01.16 10:47

Was stellen die Strings dar? Sind die dynamisch? Wenn ja woher weißt du welches Control (ComboBox, NumericUpDown du brauchst?).

Ist nur eine Vermutung. Aber mit einem leicht anderen Anwendungsdesign ist vielleicht ein PropertyGrid [https://msdn.microsoft.com/de-de/library/system.windows.forms.propertygrid%28v=vs.110%29.aspx] das Richtige. Ein PropertyGrid entspricht zum Beispiel in Visual Studio dem Control das die Properties/Eigenschaften eines Winforms Controls anzeigt.


DrHoas - Fr 15.01.16 08:08

Hallo,

danke für eure Hilfe!

Ich hab mein Projekt aus anderen Gründen inzwischen auf WPF umgestellt und da geht das dann mit einem grid ganz einfach. (Allerdings gibt es kein NumericUpDown, das ich mir dann erst basteln bzw. googeln musste).

Grüße

Philipp


Yankyy02 - So 17.01.16 00:14

Hallo DrHoas,

für WPF kannst du dir das Extended WPF Toolkit einbinden und hier das IntegerUpDown Control [http://wpftoolkit.codeplex.com/wikipage?title=IntegerUpDown&referringTitle=Home] verwenden.

LG