Hallo,
ich habe ein Problem mit einem Datagrid. Ich baue das Grid aus einer eigenen Klasse auf. Wenn eine Zeile markiert wird und über ein ContextMenu der Punkt Computer Info gewählt wird, dann wird der Datensatz an das Fenster übergeben. Geht auch - solang bis ich die Tabelle (Grid) anders sortiere. Dann stimmt der Index nicht mehr. Lässt sich die Indexierung nach einem Sort neu erstellen?
Hier der Code:
Das Grid
Die Klasse(n):
Der Code
Ich müsste wohl irgendwo so etwas wir ein RowIndexChanged einbauen - aber das gibt es so nicht und dann wäre die Frage wie ich die Reindizierung der eigentlichen Datenbasis (also TheClients) bekomme, damit ich das richtige Objekt erwische.
ich habe ein Problem mit einem Datagrid. Ich baue das Grid aus einer eigenen Klasse auf. Wenn eine Zeile markiert wird und über ein ContextMenu der Punkt Computer Info gewählt wird, dann wird der Datensatz an das Fenster übergeben. Geht auch - solang bis ich die Tabelle (Grid) anders sortiere. Dann stimmt der Index nicht mehr. Lässt sich die Indexierung nach einem Sort neu erstellen?
Hier der Code:
Das Grid
XML-Quellcode
- <Grid Background="#FFE5E5E5">
- <DataGrid x:Name="DG_Clients" ItemsSource="{Binding}" SelectedItem="{Binding ClientName}" HorizontalAlignment="Left" Height="496" Margin="10,41,0,0" VerticalAlignment="Top" Width="1497" AlternatingRowBackground="LightBlue" AlternationCount="2" FontFamily="Consolas" FontSize="11" HorizontalGridLinesBrush="#FFE4DDDD" VerticalGridLinesBrush="#FFE4DDDD" IsReadOnly="True" AutoGenerateColumns="False">
- <DataGrid.Columns>
- <DataGridCheckBoxColumn Binding="{Binding IsActive}" ClipboardContentBinding="{x:Null}" Header="Activ"/>
- <DataGridTextColumn Binding="{Binding ClientName}" ClipboardContentBinding="{x:Null}" Header="Client Name"/>
- <DataGridTextColumn Binding="{Binding Description}" ClipboardContentBinding="{x:Null}" Header="Beschreibung"/>
- <DataGridTextColumn Binding="{Binding Seriennummer}" ClipboardContentBinding="{x:Null}" Header="Serien Nummer"/>
- <DataGridTextColumn Binding="{Binding LastLogon}" ClipboardContentBinding="{x:Null}" Header="Last seen"/>
- <DataGridTextColumn Binding="{Binding Created}" ClipboardContentBinding="{x:Null}" Header="Erzeugt"/>
- <DataGridTextColumn Binding="{Binding Betriebssystem}" ClipboardContentBinding="{x:Null}" Header="Betriebssystem"/>
- <DataGridTextColumn Binding="{Binding OSVersion}" ClipboardContentBinding="{x:Null}" Header="OSVersion"/>
- <DataGridTextColumn Binding="{Binding Container}" ClipboardContentBinding="{x:Null}" Header="Container"/>
- <DataGridCheckBoxColumn Binding="{Binding UACSet.UAC_WorkstTrustAcc}" ClipboardContentBinding="{x:Null}" Header="Workstation"/>
- <DataGridTextColumn Binding="{Binding ObjectSid}" ClipboardContentBinding="{x:Null}" Header="SID"/>
- </DataGrid.Columns>
- <DataGrid.ContextMenu>
- <ContextMenu>
- <MenuItem Header="Computer Info" Click="MRowComupterInfo_Click"/>
- <MenuItem Header="Aktivieren / Deaktivieren" Click="MDeOrActivateComputer"/>
- </ContextMenu>
- </DataGrid.ContextMenu>
- </DataGrid>
- <Button x:Name="BT_RefeschCPM" Content="" Click="LoadClients" HorizontalAlignment="Left" Margin="10,4,0,0" VerticalAlignment="Top" Width="32" Height="32" ToolTip="Refresh der Client Liste" BorderBrush="{x:Null}" Foreground="{x:Null}">
- <Button.Effect>
- <DropShadowEffect/>
- </Button.Effect>
- <Button.Background>
- <ImageBrush ImageSource="view-refresh.png"/>
- </Button.Background>
- </Button>
- </Grid>
Die Klasse(n):
VB.NET-Quellcode
- Public Class ClientObject
- Public Property IsActive As Boolean
- Public Property ClientName As String
- Public Property Seriennummer As String
- Public Property Description As String
- Public Property Betriebssystem As String
- Public Property OSVersion As String
- Public Property LastLogon As String
- Public Property Container As String
- Public Property Created As String
- Public Property DistinguishedName As String
- Public Property SamAccountName As String
- Public Property UACVal As Integer
- Public Property ObjectSid As String
- Public Property UACSet As UAControl
- Public Property WMIData As New WMINetFunx.WMIData
- Public Property Network As New WMINetFunx.Network
- End Class
- Public Class ClientObjectList
- Private VClientList As New List(Of ClientObject)
- Public Property ClientList As List(Of ClientObject)
- Get
- Return VClientList
- End Get
- Set(value As List(Of ClientObject))
- End Set
- End Property
- End Class
Der Code
VB.NET-Quellcode
- Class MainWindow
- Public Shared TheClients As New LDAPFunx.ClientObjectList
- ...
- ...
- DG_Clients.DataContext = TheClients.ClientList
- Private Sub MRowComupterInfo_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
- Dim WDClientInfo As New WDComupterInfo With {
- .Workstation = TheClients.ClientList(DG_Clients.SelectedIndex)
- }
- WDClientInfo.MyDBLog = MyDBLog
- WDClientInfo.Show()
- End Sub
- End Class
Ich müsste wohl irgendwo so etwas wir ein RowIndexChanged einbauen - aber das gibt es so nicht und dann wäre die Frage wie ich die Reindizierung der eigentlichen Datenbasis (also TheClients) bekomme, damit ich das richtige Objekt erwische.