DataGrid in Datagrid dynamisch bei Abruf aufbauen
-
Donnerstag, 13. September 2012 07:40
für eine Anwendung wollen wir folgende Darstellung verwenden
1ter Screen
Kd-Nr Name Ort
> 1 Firma A München
> 2 Firma B Stuttgart
> 3 Firma C Frankfurt
> 4 Firma D Hamburg
Durch Mausklick aus den " > " soll die jeweilige Zeile ausgeklappt werden
2ter Screen
Kd-Nr Name Ort
> 1 Firma A München
v 2 Firma B Stuttgart
Idx Anred Vorname Nachname
> 1 Herr Hans Muster
> 2 Frau Ilse Wilse
> 3 Herr Otto Motto
v 3 Firma C Frankfurt
Idx Anred Vorname Nachname
> 1 Herr Peter Mayer
> 2 Frau Anna Kanne
> 4 Firma D Hamburg
Es sollen mehrere Zeilen aufgeklappt werden können. Die Spalten des Sub-Datagrid's weichen total vom ersten Datengrid ab und sollen erst beim Aufklappen geladen werden. Immer wenn ein " > " angeboten wird, kann man ein Sub-Datagrid weiter aufklappen.
3ter Screen
Kd-Nr Name Ort
> 1 Firma A München
v 2 Firma B Stuttgart
Idx Anred Vorname Nachname
> 1 Herr Hans Muster
v 2 Frau Ilse Wilse
Datum Art Inhalt
> 01.08.12 Tel Reklamation
> 05.08.12 Brief Rücksendeunterlagen
> 10.08.12 Ware Retoursendung
> 15.08.12 Fax Gutschrift
> 3 Herr Otto Motto
> 3 Firma C Frankfurt
> 4 Firma D Hamburg
Das ganze soll dynamisch sein, d.h. erst bei Aufklappen sollen die Daten gebunden werden.
Folgende Konstellationen sind denkbar:
a) das gleiche Datagrid wird in unterschiedlichen Ebenen gezogen, z.B. die Vorgänge auf Stufe 2 unterhalb der Adresse und auf Stufe 3 unterhalb der Person
b) ein Aufklappen erzeugt 2 weitere DataGrid's, z.B. man klappt die Adresse auf und bekommt alle Personen und alle Vorgänge.
c) ein Aufklappen erzeugt nicht nur Datagrid's sondern zeigt in Label's/Textboxen weitere Details wie Straße, Tel-Nr usw.
Frage:
1) Kann man so was sinnvoll über Datagrid's lösen und wie ist der Lösungsansatz ?
2) Sollte man externe Tool's für so was verwenden, wenn ja, welche ?
3) Evtl. ist der Gedankenansatz gar falsch und man sollte einen anderen Weg gehen um ein solche Info-Zentrale zu implementieren. Es sollen mehrere IZ für "Adressen, Produkte, Vorgänge, Marketing" realisiert werden.
4) Hat jemand etwas ähnliches schon umgesetzt und kann uns unterstützen?
Viele Grüße Edgar
Alle Antworten
-
Donnerstag, 13. September 2012 08:01
Hi Edgar,
ich denke das wird man mit Grouping und Datatemplets (ein bisschen nach unten Scrollen) umsetzen können.
Das Binden kann man auch direkt machen, es macht eigentlich nur dann einen Unterschied wenn ich die Daten erst lade wenn sie angezeigt werden.
MFG
Björn
- Als Antwort markiert Robert BreitenhoferMicrosoft Contingent Staff, Moderator Montag, 24. September 2012 16:32
- Tag als Antwort aufgehoben Robert BreitenhoferMicrosoft Contingent Staff, Moderator Dienstag, 25. September 2012 08:37
-
Montag, 24. September 2012 16:32Besitzer
Hallo Edgar Wenisch,
Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Dienstag, 25. September 2012 06:31
Hallo Robert,
ich habe mal den Link von Palin gegoogelt, bin aber nicht so recht weiter gekommen.
Es liegt hauptsächlich darin, dass ich noch recht neu in C#/WPF bin und in meiner bisherigen Umgebung i5/RPG eine ganz andere Ansatzweise herrscht.
Ich stelle mir ein Lösung vor, wo ein Datagrid gefüllt ist und auf einen Button-Event das Programm per Code für eine DataGrid-Row als Details eine weitere DataGrid nachlädt. In dieser neuen Unter-DataGrid wäre das gleiche Spiel wieder möglich.
Nachdem ich in dieser Richtung NULL-Erfahrung habe, wäre natürlich ein Code-Snippet sehr hilfreich.
Gruß Edgar
-
Dienstag, 25. September 2012 08:28
Hi Edgar,hier mal eine Demo mit RowsDetailsTemplate. Beim Anklicken einer Zeile wird eine Detailansicht der untergeordneten Liste als Tabelle angezeigt. Die Demo ist für eine 3-stufige Hierarchie aufgebaut und kann analog beliebig erweitert werden.<Window x:Class="Window3" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window3" Height="300" Width="300" xmlns:local="clr-namespace:WpfApplication1"> <Window.Resources> <local:ViewModel3 x:Key="vm"/> <DataTemplate x:Key="temp2"> <DataGrid Name="dg3" ItemsSource="{Binding SubItems}" AutoGenerateColumns="false" IsReadOnly="true"> <DataGrid.Columns> <DataGridTextColumn Header="Grandchild-ID" Binding="{Binding ID3}"/> <DataGridTextColumn Header="Grandchild-Text" Binding="{Binding Text3}"/> </DataGrid.Columns> </DataGrid> </DataTemplate> <DataTemplate x:Key="temp1"> <DataGrid Name="dg2" ItemsSource="{Binding SubItems}" AutoGenerateColumns="false" RowDetailsTemplate="{StaticResource temp2}" IsReadOnly="true"> <DataGrid.Columns> <DataGridTextColumn Header="Child-ID" Binding="{Binding ID2}"/> <DataGridTextColumn Header="Child-Text" Binding="{Binding Text2}"/> </DataGrid.Columns> </DataGrid> </DataTemplate> </Window.Resources> <Grid DataContext="{Binding Source={StaticResource vm}}"> <DataGrid Name="dg1" ItemsSource="{Binding View}" AutoGenerateColumns="false" RowDetailsTemplate="{StaticResource temp1}" IsReadOnly="True"> <DataGrid.Columns> <DataGridTextColumn Header="ID" Binding="{Binding ID1}"/> <DataGridTextColumn Header="Text" Binding="{Binding Text1}"/> </DataGrid.Columns> </DataGrid> </Grid> </Window>
Dazu der ViewModel:
Public Class ViewModel3 Private cvs As New CollectionViewSource Public ReadOnly Property View As ICollectionView Get If cvs.View Is Nothing Then cvs.Source = GetData Return cvs.View End Get End Property Private Function GetData() As ObservableCollection(Of C1) Dim col As New ObservableCollection(Of C1) For i = 0 To 9 Dim item1 As New C1 With {.ID1 = i + 1, .Text1 = String.Format("Master {0}", i + 1)} col.Add(item1) For k = 0 To 3 Dim item2 As New C2 With {.ID2 = i * 10 + k + 1, _ .Text2 = String.Format("Child {0}", i * 10 + k + 1)} item1.SubItems.Add(item2) For l = 0 To 3 Dim item3 As New C3 With {.ID3 = i * 100 + k * 10 + l + 1, _ .Text3 = String.Format("Grandchild {0}", i * 100 + k * 10 + l + 1)} item2.SubItems.Add(item3) Next Next Next Return col End Function Public Class C1 Public Property ID1 As Integer Public Property Text1 As String Public Property SubItems As New ObservableCollection(Of C2) End Class Public Class C2 Public Property ID2 As Integer Public Property Text2 As String Public Property SubItems As New ObservableCollection(Of C3) End Class Public Class C3 Public Property ID3 As Integer Public Property Text3 As String End Class End Class
--
Viele Gruesse
Peter- Als Antwort vorgeschlagen Robert BreitenhoferMicrosoft Contingent Staff, Moderator Dienstag, 25. September 2012 08:37
- Als Antwort markiert Edgar Wenisch Donnerstag, 11. Oktober 2012 17:50
-
Dienstag, 25. September 2012 08:36
Hallo Peter,
Danke für die schnelle Antwort. Ich werde es mal probieren, allerdings muss ich es noch im C# umschreiben, das dauert ein bisschen, da ich mit der Syntax noch nicht so fit bin.
Gruß Edgar
-
Freitag, 12. Oktober 2012 06:45Besitzer
Danke für die schnelle Antwort. Ich werde es mal probieren, allerdings muss ich es noch im C# umschreiben, das dauert ein bisschen, da ich mit der Syntax noch nicht so fit bin.
Hallo Edgar Wenisch,
Scahu Dir mal auch folgende Konverters an. Vielleicht können sie Dir weiterhelfen.
How does Code Converter compare? – hier oben hast Du Links zu mehrere Konverters.
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

