DataGridView-ComboBox-Zelle in DataTable möglich?

  • C#
  • .NET (FX) 1.0–2.0

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von TRiViUM.

    DataGridView-ComboBox-Zelle in DataTable möglich?

    Guten Morgen Allerseits,

    ich breche mir gerade einen ab, in einem DataGridView bei gewissen Zellen eine ComboBox einzufügen :S
    Grundsätzlich habe ich es geschafft, allerdings nur manuell - ohne DataTable, also jede Zelle im DGV selber beschreiben.
    Da die Bindung des DGVs an einer DataTable allerdings um einiges performanter ist, versuche ich nun, eine ComboBox-Zelle in die DataTable zu integrieren.
    Geht das überhaupt?

    Dachte, es würde so funktionieren:

    C#-Quellcode

    1. // create dataTable
    2. DataTable table = new DataTable();
    3. // create dataTable columns
    4. table.Columns.Add( "Data" );
    5. // create new row
    6. DataRow row = table.NewRow();
    7. // create combobox cell
    8. DataGridViewComboBoxCell dropdown = new DataGridViewComboBoxCell();
    9. // add items
    10. dropdown.Items.Add( "test" );
    11. // allocate cell value
    12. row[0] = dropdown;
    13. // add row to dataTable
    14. table.Rows.Add( row );
    15. // allocate table
    16. dgvParameter.DataSource = table;


    Leider ohne Erfolg, im DGV steht dann nur der Type-String des DataGridViewComboBoxCell-Objekts...

    Vielen Dank für Eure Antworten :saint:

    ~TRiViUM
    Willkommen im Forum.

    Mach's im Designer und schau Dir den generierten Code an. Also Im Designer das DGV anklicken, oben rechts auf den SmartTag, Spalten hinzufügen, ungebundene Spalte, Typ DataGridViewComboBoxColumn
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Danke für Deine Antwort.
    So eine ganze DataGridViewComboBoxColumn möchte ich ja genau nicht haben.
    In der Spalte können, neben den ComboBoxen, auch Text-Zellen sein...

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VaporiZed“ ()

    Oh, falsch gelesen. Ist sicher möglich, aber inhaltlich m.E. verschwurbelt. Da wird Datenhaltung m.E. ziemlich (ver)kompliziert. Welchen Hintergrund hat das bzw. kannst Du ein Beispiel für den Grund nennen? Vielleicht lässt sich so eine Lösung besser finden.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed:
    Gleich im ersten Beitrag von der besten Seite gezeigt... :D
    Das mit dem Zitieren muss ich mir wohl noch mal genauer anschauen, hab wohl noch Welpenschutz :rolleyes:

    Jap, dass es das ganze verkompliziert, dem bin ich mir bewusst, hatte selber nur keine bessere Lösung :whistling:

    Klar hab ich ein Beispiel für den Grund:
    Ich habe eine Liste an Parametern.
    Im DataGrid gibt es heruntergebrochen 2 Spalten: Beschreibung und Wert.
    Es gibt im Prinzip 4 Arten von Werten:
    - Text
    - Zeit/Datum
    - Zahl (Float/Integer/..)
    - Enumeration (Vordefinierte Werte)

    Für den Text wollte ich TextCells nehmen.
    Für Zeit/Datum und für Zahlen bin ich mir nicht sicher, ob es da auch spezielle Zellen für das DGV gibt.
    Und für die Enumeration hatte ich dann eine ComboBoxCell angedacht.

    Das ganze hätte ich dann natürlich desshalb lieber in einer DataTable, da ich die modifizierten Parameter ja auch wieder "abspeichern" möchte und ungern Zelle für Zelle durchgehen möchte...

    Wenn es bessere Lösungsvorschläge gibt, bin ich natürlich für alles offen :saint:

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „TRiViUM“ ()

    TRiViUM schrieb:

    Für den Text wollte ich TextCells nehmen.
    Für Zeit/Datum und für Zahlen bin ich mir nicht sicher, ob es da auch spezielle Zellen für das DGV gibt.
    Und für die Enumeration hatte ich dann eine ComboBoxCell angedacht.
    Jo, bei Enums ist eine Combo der übliche CellType, für die anderen Fälle kenne ich auch nix als TextboxCell.
    Aber die Combo da individuell reinfrickeln wird glaub ziemlich kompliziert - evtl. geht das mit datengebundener Spalte auch garnet.
    Weiters entsteht das Problem, wenn der User einen SpaltenHeader zum Sortieren klickst - dann muss die ComboCell sofort weggeräumt werden und an anderer Stelle wieder hin.
    Oder wenn ein Filter die Position des Datensatzes im DGV verändert.
    Oder wenn ein Datensatz gelöscht wird.
    Also viel Aufwand, der viel und undurchsichtigen Code produziert.
    @ErfinderDesRades:
    Ich bezweifle mittlerweile auch, dass es mit datengebundenen Spalten geht...
    Auf das Problem mit dem Sortieren bin ich auch schon gestoßen, nachm Sortieren sind die Combos nämlich weg - habs "gelöst", in dem ich das Sortieren einfach deaktiviert habe.
    Gelöscht oder zwischeneingefügt werden kann ein Datensatz nicht, nur der Wert ist editierbar/auswählbar.

    Hab auch schon überlegt, ein eigenes Control zu programmieren, wo ich als DataSource einfach die Liste der Parameter-Klassen (Interface) zuweisen kann.
    Je nach Typ des Wertes dann das entsprechende Control auf ein scrollbares Panel packen oder so...

    Wollte mich vorher erkundigen, ob's da doch eine performante einigermaßen "Out-Of-The-Box"-Lösung von .Net dazu gibt :rolleyes:

    EDIT:
    Habe das ursprüngliche Vorhaben aufgrund des unübersichtlichen Datenhandlings über den Haufen geschmissen und werde nun doch alles im String-Format zum Grid geben.
    Da brauch ich dann nicht mal mehr eine DataTable, da ich die List<MyClass> direkt ans Grid binde...

    Danke für eure Meinungen dazu :thumbup:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TRiViUM“ ()