none
WPF DataGrid Spalten teilen RRS feed

  • Frage

  • Hallo Zusammen,

    kaum ist ein Problem gelöst, wartet schon das nächste:

    Erstellt habe ich als Beispiel ein einfaches DataGrid mit Headern, Spalten und Zeilen.

    Nun möchte ich eine Spalte so teilen: Der Header bleibt wie gehabt, unterhalb dieses Headers befinden sich aber nicht nur eine, sondern zwei oder mehr Spalten.

    Wie kann ich das erreichen?

    Mit freundlichen Grüßen und vielen Dank für die Hilfe im Voraus

    Ottilie Steinhauer

    Dienstag, 10. Juli 2012 10:10

Antworten

  • Ich habe für solch eine Aufgabenstellung ein eigenes UserControl erstellt, welches die Linien entsprechend “malt”, Bereiche einfärbt (Fill – Rectangle) und Text horizontal und auch vertikal “mal”. Das Ganze ist nicht so schwer und arbeitet ähnlich dem DataGrid im virtuellen Modus, aber ohne Eingabemöglichkeit. Klicks werden mit den entsprechenden (Zell)-Koordinaten als Ereignis rausgereicht. Als Datenquelle kann man ein Array von Objekten eines Typs nutzen, der die Information pro Zelle (Farbe, Text, Ausrichtung, ggf. colspan/rowspan) verwaltet.
     
    --
    Viele Gruesse
    Peter
    • Als Antwort markiert ottilie Montag, 16. Juli 2012 13:12
    Mittwoch, 11. Juli 2012 13:26
  • Hi,

    ich bin ein großer Freund von MVVM. Daher scheint mir - so wie Peter es beschreibt - ein (Data-)Grid mit einem vernünftigen Template für die Gestaltung (inkl. der 'Linierung') der Zellen und ein dahinterliegendes ViewModel das die Farbe/Beschriftung/etc. steuert, der erfogversprechendste Ansatz.

    Da es scheinbar weniger um die Präsentation/Bearbeitung von Daten(massen) geht, ist möglicherweise tatsächlich ein Grid eine geeignete Ausgangsbasis. Oder vielleicht hilft eine TableView (hab ich nur so gesehen, kenn ich aber nicht; liegt aber im SourceCode vor und sollte somit leichter anpassbar sein, als ein DataGrid).

    Gruß
    Jürgen

    • Als Antwort markiert ottilie Montag, 16. Juli 2012 13:12
    Mittwoch, 11. Juli 2012 13:41

Alle Antworten

  • Hallo,

    inzwischen habe ich alle Spalten zum Datagrid hinzugefügt und beschäftige mich damit nur einen Teil der vertikalen Linien auch im Header erscheinen zu lassen.

    Vielen Dank an alle, die sich mit dem Problem befasst haben.

    Ottilie Steinhauer

    Mittwoch, 11. Juli 2012 06:43
  • Hi,

    eine Spalte ist eine Spalte, da geht nichts dran vorbei (Excel ist leider nicht überall).

    Wenn die 'Spalte' nur angezeigt werden soll, kannst Du eine DataGridTemplateColumn verwenden das CellTemplate so gestalten, dass zwei Inhalte präsentiert werden. Beim Editieren (CellEditingTemplate) würde das aber wohl etwas merkwürdig werden.

    Gruß
    Jürgen

    Mittwoch, 11. Juli 2012 06:55
  • Hallo,

    erstmal vielen Dank für Deine Antwort. Aber da gehen die Probleme weiter.Zusätzliche Spalten werden im Code erzeugt mit

    varcol = newDataGridTemplateColumn();

    Sie sollen auch nicht mit Inhalt gefüllt, sondern sollen lediglich gefärbt werden, daher auch kein Header. Sie werden gefärbt beispielsweise mit

    cell.Background = Brushes.Red;

    Gitterlinien sollen aber unterhalb des Headers enthalten bleiben!

    Gruß

    Ottilie

    Mittwoch, 11. Juli 2012 10:12
  • Hi,

    ich bin ein bisschen verwirrt. Als ich geantwortet habe, war nur Deine Frage da ... jetzt gibt es auch eine Antwort von Dir (vor meiner). Die ist also von mir unberücksichtigt.

    In Deiner zweiten Antwort erkenne ich nicht, wo ich weiter helfen kann. Ich habe aber den Eindruck, dass möglicherweise das DataGrid nicht das richtige Control ist (es heißt schon mit gutem Grund DataGrid). Wenn Du also noch weitere Hilfe brauchst, sag Bescheid und poste vielleicht mal ein Bild - ergänzt um informative Beschreibung - von dem, was Du am Ende erreichen möchtest.

    Gruß
    Jürgen

    Mittwoch, 11. Juli 2012 10:28
  • Hallo,

    es ist schon klar, dass DataGrid stark angepasst werden muss, aber eine bessere Struktur habe ich nicht gefunden. Vielleicht weisst Du eine bessere:

    Es soll ein Gitternetz von ca 5 Zeilen und 150 Spalten dargestellt werden, unbedingt mit durchgezogenen Linien (daher keine Table), aber nicht alle Linien bis zum Header. Ein Teil der Zelle wird eingefärbt, d.h. die Zelle muss einzeln färbbar sein vom Programm und die Farbe muss wieder im Programmablauf zurückgenommen werden. Beschriftung der Zellen muss auch möglich sein, hier ist die Datenmenge aber überschaubar.

    Ist das Gitternetz fertig gestellt, soll nach Klick auf einen Button eine Animation erfolgen: Scollen von rechts nach links und umgekehrt, dabei werden nacheinander Spalten als aktiv markiert und sollen ausgelesen (Farbe und Inhallt der Zellen) werden können. Beim Datagrid geht das.

    Gruß

    Ottilie

    Mittwoch, 11. Juli 2012 12:45
  • Ich habe für solch eine Aufgabenstellung ein eigenes UserControl erstellt, welches die Linien entsprechend “malt”, Bereiche einfärbt (Fill – Rectangle) und Text horizontal und auch vertikal “mal”. Das Ganze ist nicht so schwer und arbeitet ähnlich dem DataGrid im virtuellen Modus, aber ohne Eingabemöglichkeit. Klicks werden mit den entsprechenden (Zell)-Koordinaten als Ereignis rausgereicht. Als Datenquelle kann man ein Array von Objekten eines Typs nutzen, der die Information pro Zelle (Farbe, Text, Ausrichtung, ggf. colspan/rowspan) verwaltet.
     
    --
    Viele Gruesse
    Peter
    • Als Antwort markiert ottilie Montag, 16. Juli 2012 13:12
    Mittwoch, 11. Juli 2012 13:26
  • Hi,

    ich bin ein großer Freund von MVVM. Daher scheint mir - so wie Peter es beschreibt - ein (Data-)Grid mit einem vernünftigen Template für die Gestaltung (inkl. der 'Linierung') der Zellen und ein dahinterliegendes ViewModel das die Farbe/Beschriftung/etc. steuert, der erfogversprechendste Ansatz.

    Da es scheinbar weniger um die Präsentation/Bearbeitung von Daten(massen) geht, ist möglicherweise tatsächlich ein Grid eine geeignete Ausgangsbasis. Oder vielleicht hilft eine TableView (hab ich nur so gesehen, kenn ich aber nicht; liegt aber im SourceCode vor und sollte somit leichter anpassbar sein, als ein DataGrid).

    Gruß
    Jürgen

    • Als Antwort markiert ottilie Montag, 16. Juli 2012 13:12
    Mittwoch, 11. Juli 2012 13:41
  • Hallo Jürgen und Peter,

    inzwischen habe ich wie von Peter vorgeschlagen ein Grid erstellt und Rechtecke hinein gezeichnet. Auch die Funktionen zum Bearbeiten des Grid arbeiten korrekt. Nuin beschäftige ich mich mit der Animation. Falls Fragen dazu auftauchen, werde ich einen neuen Thread starten.

    Herzlichen Dank für Eure Antworten, sie haben mir sehr weiter geholfen.

    Gruß

    Ottilie

    Montag, 16. Juli 2012 13:16