Hallo,
ich habe ein Problem mit der Darstellung eines Datagrids bei dem ich die Daten vorher nicht in einer Klasse ablegen kann, weil sich die Elemente erst zur Laufzeit ergeben.
Als Beispiel:
Ich habe eine Menge an Usern und ein User kann in verschiedenen Gruppen sein - die User werden erst zur Laufzeit eingelesen
Dann habe ich eine Menge an Gruppen - diese werden auch zur Laufzeit eigelesen und die Anzahl ist unterschiedlich.
Nun möchte ich das Ergebnis - also welche User ist Mitglied in welchen Gruppen in einem DataGrid anzeigen.
Ich bekomme es nur nicht hin die Inhalte auf die Columns zu verteilen...
Vielleicht ist es ja ganz einfach - aber das glaube ich nicht. Ich habe es in einem Beispiel zusammengefasst:
Hier der Code:
Ich vermute mein Fehler liegt im Bereich Zeile 85...
Würde mich freuen, wenn jemand helfen könnte.
ich habe ein Problem mit der Darstellung eines Datagrids bei dem ich die Daten vorher nicht in einer Klasse ablegen kann, weil sich die Elemente erst zur Laufzeit ergeben.
Als Beispiel:
Ich habe eine Menge an Usern und ein User kann in verschiedenen Gruppen sein - die User werden erst zur Laufzeit eingelesen
Dann habe ich eine Menge an Gruppen - diese werden auch zur Laufzeit eigelesen und die Anzahl ist unterschiedlich.
Nun möchte ich das Ergebnis - also welche User ist Mitglied in welchen Gruppen in einem DataGrid anzeigen.
Ich bekomme es nur nicht hin die Inhalte auf die Columns zu verteilen...
Vielleicht ist es ja ganz einfach - aber das glaube ich nicht. Ich habe es in einem Beispiel zusammengefasst:
XML-Quellcode
- <Window x:Class="MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:local="clr-namespace:MatrixProb"
- mc:Ignorable="d"
- Title="MainWindow" Height="450" Width="800">
- <Grid>
- <DataGrid x:Name="DG_Matrix" HorizontalAlignment="Left" Height="325" Margin="10,55,0,0" VerticalAlignment="Top" Width="575" FontFamily="Consolas" FontSize="9" />
- <Button x:Name="BT_Load_Data" Click="Fill_Click" Content="Load" HorizontalAlignment="Left" Margin="10,20,0,0" VerticalAlignment="Top" Width="75" />
- <Button x:Name="BT_Auswertung" Click="Auswertung_Click" Content="Auswertung" HorizontalAlignment="Left" Margin="110,20,0,0" VerticalAlignment="Top" Width="75" />
- </Grid>
- </Window>
Hier der Code:
Visual Basic-Quellcode
- Class MainWindow
- Public Class Users
- Public Property SamAccountName As String
- Public Property DisplayName As String
- Public Property GroupMember As New List(Of String)
- End Class
- Public Class Groups
- Public Property GroupName As String
- Public Property SamAccountName As String
- End Class
- Dim TheUsers As New List(Of Users)
- Dim TheGroups As New List(Of Groups)
- Private Sub Fill_Click()
- Dim UserObj As New Users
- UserObj.DisplayName = "Mike Meyers"
- UserObj.SamAccountName = "MM"
- UserObj.GroupMember.Add("Intern")
- UserObj.GroupMember.Add("Empfang")
- UserObj.GroupMember.Add("Allgemeines")
- TheUsers.Add(UserObj)
- Dim UserObj2 As New Users
- UserObj2.DisplayName = "Frank Nobody"
- UserObj2.SamAccountName = "FN"
- UserObj2.GroupMember.Add("Intern")
- UserObj2.GroupMember.Add("Chef")
- UserObj2.GroupMember.Add("Allgemeines")
- TheUsers.Add(UserObj2)
- Dim UserObj3 As New Users
- UserObj3.DisplayName = "Polly Pocket"
- UserObj3.SamAccountName = "PP"
- UserObj3.GroupMember.Add("Intern")
- UserObj3.GroupMember.Add("Buchhaltung")
- UserObj3.GroupMember.Add("Allgemeines")
- TheUsers.Add(UserObj3)
- Dim GrpObj1 As New Groups
- GrpObj1.GroupName = "Interne Mitarbeiter"
- GrpObj1.SamAccountName = "Intern"
- TheGroups.Add(GrpObj1)
- Dim GrpObj2 As New Groups
- GrpObj2.GroupName = "Abteilung Empfang"
- GrpObj2.SamAccountName = "Empfang"
- TheGroups.Add(GrpObj2)
- Dim GrpObj3 As New Groups
- GrpObj3.GroupName = "Chefs"
- GrpObj3.SamAccountName = "Chef"
- TheGroups.Add(GrpObj3)
- Dim GrpObj4 As New Groups
- GrpObj4.GroupName = "Abteilung Buchhaltung"
- GrpObj4.SamAccountName = "Buchhaltung"
- TheGroups.Add(GrpObj4)
- Dim GrpObj5 As New Groups
- GrpObj5.GroupName = "Für Alle"
- GrpObj5.SamAccountName = "Allgemeines"
- TheGroups.Add(GrpObj5)
- BT_Load_Data.Background = Brushes.Green
- End Sub
- Private Sub Auswertung_Click()
- DG_Matrix.Columns.Add(New DataGridTextColumn With {.Header = "User", .Binding = New Binding(".")})
- For i = 0 To TheGroups.Count - 1
- Dim NCol As New DataGridTextColumn With {
- .Header = TheGroups(i).GroupName,
- .Binding = New Binding(".")
- }
- DG_Matrix.Columns.Add(NCol)
- Next
- For i = 0 To TheUsers.Count - 1
- Dim NRow As New DataGridRow
- Dim Grp As String = ""
- For Each GroupItem In TheGroups
- If Not TheUsers(i).GroupMember.FindIndex(Function(x) x.Equals(GroupItem.SamAccountName)) = -1 Then
- 'Match
- Grp += ",X"
- Else
- 'NoMatch
- Grp += ",O"
- End If
- Next
- NRow.Item = TheUsers(i).DisplayName & Grp
- DG_Matrix.Items.Add(NRow)
- Next
- End Sub
- End Class
Ich vermute mein Fehler liegt im Bereich Zeile 85...
Würde mich freuen, wenn jemand helfen könnte.