Füllen Sie ein Datagrid mit dynamischen Spalten
Ich habe ein Datagrid, das muss gefüllt werden dynamicly.
Dem tablelayout ist wie:
id | image | name | Description | Name-1 | Name-N
Den ersten 4 Spalten sind statisch, die andere dynamisch. Der Benutzer sollte in der Lage sein, um hinzuzufügen, wie viele Nutzer, wie er will.
Ich versuche den Vergleich der Daten von mehreren Nutzern, indem Sie Sie nebeneinander in der Tabelle.
Momentan habe ich eine Listbox whitch enthält insgesamt die Namen von dynamisch generierten Spalten und eine Methode, die filles die statischen Spalten. Ich kann auch laden Sie die Daten für jeden Benutzer. jetzt muss ich Sie Zusammenführen zu einer großen Tabelle.
Das Hauptproblem ist jetzt: Wie kann man die "Userdata" und die statischen Inhalte in einem datagrid.
Im nicht sicher, was Ihr bittet.
Johannes siehe meine Antwort, so dass Sie sehen können, warum ich gefragt wurde.
InformationsquelleAutor Wr4thon | 2013-08-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es mindestens drei Möglichkeiten, dies zu tun:
Verwenden CustomTypeDescriptor
*empfohlen für die Einfachheit
1. Ansatz: code-behind zu generieren, die die DataGrid-Spalten zur Laufzeit. Dies ist einfach zu implementieren, aber vielleicht fühlt sich ein bisschen hackish, vor allem, wenn man mit MVVM. So hätten Sie das DataGrid mit festen Spalten:
Wenn du deinen "Namen", die bereit sind, ändern Sie dann die Gitter durch hinzufügen/entfernen von Spalten, z.B.:
Werden Sie wollen, um eine wrapper-Klasse erstellen, enthalten die original-Klasse, plus ein Wörterbuch, enthalten die benutzerdefinierten Eigenschaften. Lassen Sie uns sagen, Ihre Haupt-row-Klasse "Benutzer", dann würden Sie wollen eine wrapper-Klasse so etwas wie dieses:
Auffüllen der
ItemsSource
mit einer Sammlung von diesem neuen "CustomUser" Klasse:So binden es zusammen, zum Beispiel:
2. Ansatz: verwenden DataTable. Das macht die Verwendung der custom-Art-Infrastruktur unter der Haube, aber ist einfacher zu bedienen. Einfach binden Sie das DataGrid ist
ItemsSource
zu einemDataTable.DefaultView
Eigenschaft:Dann können Sie die Spalten definieren, wie du willst, zB:
3. Ansatz: nutzen Sie die Erweiterbarkeit .Net-Datentyp system. Verwenden Sie insbesondere eine
CustomTypeDescriptor
. Dies ermöglicht Ihnen das erstellen einer benutzerdefinierten Typ zur Laufzeit; die wiederum ermöglicht Ihnen die DataGrid -, dass Ihre Art hat die Eigenschaften "Name1", "Name2", ... "NameN", oder was auch immer andere Sie wollen. Sehen hier ein einfaches Beispiel für diesen Ansatz.Hat jemand erfolgreich automatisch generierten Spalten in der DataGrid mit Methode 3? Ich habe bereits eine custom-Typ-Deskriptor definiert, ich kann binden, um seine Eigenschaften ganz gut, aber die automatische generieren von Spalten funktioniert nicht.
was wollen wir Bearbeiten und aktualisieren von Werten in den gleichen Daten-grid
Dies scheint nur zu funktionieren, wenn die Daten Spalten Hinzugefügt werden, bevor die Steuerung wird initialisiert. Wenn Sie die Spalten, die später, wie Sie tun bekommen, dass sich in der Startaufstellung?
Schwierige Frage, ich weiß es nicht aus der hand. Rufen Sie InvalidateVisual vielleicht?
InformationsquelleAutor McGarnagle
Ich bin derzeit mit einem anderen Ansatz, ich bin nicht sicher, tho wenn es Recht ist, zu tun, wie diese, aber es funktioniert. Ich machte eine kleine Probe.
Beachten Sie, dass für diese Arbeit auf jeden Eintrag im Datagrid Brauchen, um die gleiche dynamische Spalten, so dass es ein bisschen weniger flexibel. Aber wenn u haben die Einträge mit diffrent Anzahl der Spalten, in der jedem Eintrag ein Datagrid ist wohl der falsche Ansatz sowieso.
Diese sind meine Klassen
Und dies ist der Code Hinter:
Und in .XAML einfach:
Wäre sehr interessiert, wenn u können, stellen Sie ein benutzerdefiniertes Steuerelement aus. Das würde mir sehr helfen.
InformationsquelleAutor Bedi
Wenn Sie nicht erforderlich sind, um zu zeigen, dass in einem einzigen großen DataGrid(table), dann könnten Sie eine DataGrid mit id,Bild,name,Beschreibung und wenn ein Datensatz ausgewählt ist, DataGrid, dann zeigen Sie/aktualisieren einer ListBox mit den Namen der Bilder, die in Beziehung zum ausgewählten Datensatz
InformationsquelleAutor Mauricio Gracia Gutierrez