none
WPF DataGrid SelectedItem RRS feed

  • Frage

  • Hallo zusammen,

    trotz einiger Versuche und jeder Menge Google bringe ich es nicht zusammen.

    Ich möchte auf Zeilen in meinem DataGrid zugreifen und Werte auslesen.

    Das Datagrid wird mit Daten aus einer Datenbank gefüllt, vorerst noch Northwind-Beispieldatenbank.

     ObjectQuery<Orders>  orders= dataEntities.Orders;
                var query = from order in orders
                            where order.Ship_Region != null
                            select new { order.Customer_ID, order.Ship_Name, order.Ship_City, order.Required_Date };
                dataGrid1.ItemsSource = query.ToList();

    Dann kann das SelectionChanged-Ereignis aufgerufen werden

            private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
     MessageBox.Show(dataGrid1.SelectedItem.ToString() ;}

    Dort wird mir auch ganz korrekt angezeigt {CustomerID = ...} Nun brauche ich natürlich Zugriff auf die Daten und nicht nur die Anzeige. Sei die Klasse TestDaten so initialisiert:

      public class TestDaten
        {
            public string Customer_ID { get; set; }
            public string Ship_Name { get; set; }
            public string Ship_City { get; set; }
            public object RequiredDate { get; set; }
        }

    Dann müsste

    TestDaten selection = (TestDaten)dataGrid1.SelectedItem;
    string cust = selection.Customer_ID;

    funktionieren., tut es aber nicht. Wo liegt der Fehler?

    Gruß

    Otti

    Dienstag, 26. Februar 2013 10:16

Alle Antworten

  • Hallo Otti,

    in deinem Select bekommst du einen anonymen Datentyp zurück: "select new { order.Customer_ID .... "

    var query = from order in orders
                           
    where order.Ship_Region != null
                           
    select new { order.Customer_ID, order.Ship_Name, order.Ship_City, order.Required_Date };

    sollte jedoch so aussehen:

    select new TestDaten{ Customer_Id = oder.Customer_ID, Ship_Name = order.Ship_Name.... usw. }

    so sollte es dann gehen ;-).

    Gruß Carl

    Dienstag, 26. Februar 2013 11:57
  • Hallo Carl,

    vielen Dank für Deine rasche Antwort.

    Wenn ich den Code ab select wie vorgeschlagen ändere kommt eine Fehlermeldung: NotSupportedException wurde nicht behandelt Typ 'System.Nullable`1' kann nicht in Typ 'System.Object' umgewandelt werden. 'LINQ to Entities' unterstützt nur die Umwandlung primitiver Entity Data Model-Typen.

    Was jetzt?

    Gruß

    Otti

    Dienstag, 26. Februar 2013 16:38
  • Hallo zusammen,

    das Problem habe ich jetzt ganz anders gelöst. Und zwar über ein DataSet mit TableAdapter. Dann bekomme ich den Typ DataRowView als Rückgabewert von dataGrid1.SelectedItem und kann auf die einzelnen Werte zugreifen.

    Gruß

    Otti

    Mittwoch, 27. Februar 2013 09:33