Hallo zusammen!
Bei Microsoft habe ich ein Beispiel gefunden, um die Zeilen eines DataGrids zu nummerieren. Solange das Grid im MainWindow sitzt klappt das auch.
In meinem Projekt befindet sich im MainWindow aber ein TabControl, in dem dann ein UserControl liegt, das dann die eigentliche Tabelle enthält.
MainWindow XAML
UserControl XAML
Code des Converters
Liegt das DataGrid wie hier beschrieben im UserControl, dann ist "dg", also das gefundene DataGrid, im Converter Nothing und in der nächsten Zeilen erscheint dann natürlich ein Fehler.
Verschiebe ich das DataGrid direkt ins MainWindow, dann funktioniert es. Alle Versuche die Suche nach dem DataGrid direkt auf das UserControl umzustellen schlugen fehl. Hat jemand eine Idee was man da ändern muss?
Alternativen sind auch willkommen. Das DataGrid soll einfach immer von oben nach unten durchgehend nummeriert sein. Auch wenn es sortiert oder gefiltert wurde.
Gruß
eddi
Bei Microsoft habe ich ein Beispiel gefunden, um die Zeilen eines DataGrids zu nummerieren. Solange das Grid im MainWindow sitzt klappt das auch.
In meinem Projekt befindet sich im MainWindow aber ein TabControl, in dem dann ein UserControl liegt, das dann die eigentliche Tabelle enthält.
MainWindow XAML
UserControl XAML
XML-Quellcode
- <Grid>
- <Grid.Resources>
- <local:ConvertItemToIndex x:Key="IndexConverter"/>
- </Grid.Resources>
- <DataGrid x:Name="Grid01" ItemsSource="{Binding Coll}">
- <DataGrid.RowHeaderStyle>
- <Style TargetType="{x:Type DataGridRowHeader}">
- <Setter Property="Content" Value="{Binding Converter={StaticResource IndexConverter}}" />
- </Style>
- </DataGrid.RowHeaderStyle>
- </DataGrid>
- </Grid>
Code des Converters
VB.NET-Quellcode
- Public Class ConvertItemToIndex
- Implements IValueConverter
- Public Function Convert(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
- Try
- 'Get the CollectionView from the DataGrid that is using the converter
- Dim dg As DataGrid = DirectCast(Application.Current.MainWindow.FindName("Grid01"), DataGrid)
- Dim cv As CollectionView = DirectCast(dg.Items, CollectionView)
- 'Get the index of the item from the CollectionView
- Dim rowindex As Integer = cv.IndexOf(value) + 1
- Return rowindex.ToString()
- Catch e As Exception
- Throw New NotImplementedException(e.Message)
- End Try
- End Function
- Public Function ConvertBack(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
- Throw New NotImplementedException()
- End Function
- End Class
Liegt das DataGrid wie hier beschrieben im UserControl, dann ist "dg", also das gefundene DataGrid, im Converter Nothing und in der nächsten Zeilen erscheint dann natürlich ein Fehler.
Verschiebe ich das DataGrid direkt ins MainWindow, dann funktioniert es. Alle Versuche die Suche nach dem DataGrid direkt auf das UserControl umzustellen schlugen fehl. Hat jemand eine Idee was man da ändern muss?
Alternativen sind auch willkommen. Das DataGrid soll einfach immer von oben nach unten durchgehend nummeriert sein. Auch wenn es sortiert oder gefiltert wurde.
Gruß
eddi