Readdy Write  
0,00 €
Your View Money
Views: Count
Self 20% 0
Your Content 60% 0

Users by Links 0
u1*(Content+Views) 10% 0
Follow-Follower 0
s2*(Income) 5% 0

Count
Followers 0
Login Register as User

Gelöst: System.InvalidCastException HResult=0x80004002 bei SelectedItem und SelectedValue

29.12.2018 (👁319)

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)