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

WPF: SelectedItem aus DataGrid auslesen, Anonymous Type

31.12.2018 (👁10511)

WPF: SelectedItem aus DataGrid auslesen

 

 

Wie wertet man eine Spalte in einem WPF DataGrid.SelectedItem aus?

 

Aufgabe:

Ich möchte den wert einer Spalte auslesen aus einem Datengrid in WPF. Leider ergibt die Auswertung von DataGrid.SelectedItem eine Zeile vom Type <Anonymus Type> und wenn man die Row umwandelt in von DataGrid.SelectedItem in DataRowView  dann wird als Ergebnis immer null zurückgegeben oder die Convertierung von Anonymous Type in DataRowView ist nicht möglich

 

Problem Umwandlung SelectedItem

DataRowView row = ctlDataGrid.SelectedItem as DataRowView;

->returns null

 

Lösung:

Super Lösung mit C# dynamic.

Man kann den Laufzeit Datentyp dynamic verwenden. Dieser Datentyp dynamic kann zur Laufzeit frei verwendet werden wie var variant und man kann einfach die Spalten oder Felder wie eine Eigenschaft abfragen.

Also einfach Umwandlung von SelectedItem in dynamic und dann die Spalte als dynamic.Spalte auswerten. Das ist einfacher als ein Array oder List vom Type String zu bilden.

dynamic row = ctlDataGrid.SelectedItem;

sName = row.Nachname;

 

 

 

 

Auszug : Debug

Der Debug Auszug ergibt, dass sich in der DataGrid SelectedItem ein Array aus Strings zur Laufzeit ergibt.

Die SelectedItem ist von Type <Anonymous Type>

Name

Value

Type

ctlDataGrid.SelectedItem

{ Nachname = "Butzer", Maschine = "Drehbank 1", Schichtgruppe = "Schicht 2" }

<Anonymous Type>

 

 

Code-Beispiel zu Auswerten des ausgewählten Elements in einem WPF DataGrid Selected Item

Private void CtlDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)

        {

            //----------< CtlDataGrid_SelectionChanged() >----------

            string sName = "";

            //--< get_DataGrid_SelectedItem >--

            //* get DataGrid.SelectedItem as <Anonymus Type > into c#.dynamic

            //* get Value of dynamic variable simply bei get as named property  like dynamic_value.Field

            if (ctlDataGrid.SelectedItem != null)

            {

                dynamic row = ctlDataGrid.SelectedItem;

                sName = row.Nachname;

            }

            //--</ get_DataGrid_SelectedItem >--

 

            //< insert button >

            Button btn = new Button();

            btn.Background = new SolidColorBrush(Colors.Red);

            btn.Content = sName;

            //#todo: Event drag drop einfügen

 

            _srcPanel.Child = btn;

            //</ insert button >

 

            this.Close();

            //----------</ CtlDataGrid_SelectionChanged() >----------

        }