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
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.
Source=Schichtplaner
StackTrace:
at
Schichtplaner.Page_Base_Mitarbeiter.CtlDataGrid_SelectionChanged(Object
sender, SelectionChangedEventArgs e)
|