Gelöst:
System.InvalidCastException HResult=0x80004002
Fehlermeldung
System.InvalidCastException HResult=0x80004002 Message=Das Objekt des Typs "<>f__AnonymousType6`6 [System.Int32,System.String,System.String,System.String,System.String,System.String]"
kann nicht in Typ "Schichtplaner.tblBase_Mitarbeiter" umgewandelt werden. |
Was bedeutet die Fehlermeldung:
Die Fehlermeldung sagt aus, dass ein Array[..] aus Integer und Strings nicht in eine Tabelle-Struktur umgewandelt werden kann.
Vorkommen:
Der Fehler tritt auf, wenn man eine Zeile in einem WPF DataGrid auswählt. Das Datengrid ist über Binding an einen Tabelle gebunden gewesen.
Alter Code, C#, XAML zugriff auf WPF DataGrid
private void CtlDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (ctlDataGrid.SelectedItem != null) { var item = (tblBase_Mitarbeiter) ctlDataGrid.SelectedItem; load_Dataset_byID(item.IDMitarbeiter); } } |
Lösung:
Wenn man in einem DatenGrid eine Zeile aus mehreren Tabellen über Join-Abfragen bindet, dann kann die Auswahl einer einzelnen Zeile auch nicht in das Format eine Tabelle konvertiert werden.
Als Lösung kann man den SelectedValue eines Grids auswerten. Hierzu muss allerdings eine Spalte über den SelectedValuePath eingestellt werden.
Neuer Code mit Abfrage des SelectedValues eines DataGrid
.cs
private void CtlDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { int ID = (int) ctlDataGrid.SelectedValue; load_Dataset_byID(ID); } |
.xaml
In der xaml Datei muss der SelectedValue auf eine Spalte des Datengrids eingestellt werden
<DataGrid x:Name="ctlDataGrid" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" AutoGenerateColumns="False" GridLinesVisibility="All" Background="#F0f0f0" ItemsSource="{Binding}" SelectionMode="Single" IsReadOnly="True" MouseDoubleClick="ctlDataGrid_MouseDoubleClick" SelectionChanged="CtlDataGrid_SelectionChanged" HeadersVisibility="All" Grid.Row="1" SelectedValuePath="IDMitarbeiter" >
<DataGrid.Columns > <DataGridTextColumn Header="ID" Binding="{Binding IDMitarbeiter}"/> <DataGridTextColumn Header="Nachname" Binding="{Binding Nachname}"/> <DataGridTextColumn Header="Vorname" Binding="{Binding Vorname}"/> <DataGridTextColumn Header="Schicht" Binding="{Binding Schicht}" /> <DataGridTextColumn Header="Maschine" Binding="{Binding Maschine}"/> <DataGridTextColumn Header="MA Gruppe" Binding="{Binding Mitarbeitergruppe}" Width="*"/>
</DataGrid.Columns> </DataGrid>
|
Ergebnis:
Wenn jetzt eine Zeile selectiert wird, wird als Ergebnis nicht die Zeile sonder der Wert der definierten Spalte angezeigt.
SelectedValuePath=IDMitarbeiter SelectedValue=2 |
Komplette Details Fehlermeldung
HResult=0x80004002 Message=Das Objekt des Typs "<>f__AnonymousType6`6[System.Int32,System.String,System.String,System.String,System.String,System.String]" kann nicht in Typ "Schichtplaner.tblBase_Mitarbeiter" umgewandelt werden.
Source=Schichtplaner StackTrace: at Schichtplaner.Page_Base_Mitarbeiter.CtlDataGrid_SelectionChanged(Object sender, SelectionChangedEventArgs e)
|