获取选定的行值

时间:2011-08-21 13:37:22

标签: c# .net wpf datagrid

我正在尝试从WPF中的DataGrid获取所选行值,并且它被证明非常令人沮丧。但是在WinForms中它很简单。

如何从wpf中的数据网格控件中获取选定的指定的单行值?

我使用了几个我在网上找到的片段,所有这些片段都给了我整行的内容,包括列名!

我试过了:

string value = dataGrid1.SelectedItems[0].ToString();

string value = dataGrid1.SelectedCells[dataGrid1.SelectedItems[0]].ToString();

我在wpf控件部分查看了MSDN,但看不到我如何在任何地方获取行值。

我一直回来的是: { OrderId = d#dfuzJRo , UserId = 56, OrderTotal = , Freight = , DeliveryStatus = , OrderStatus = Pending, TransactionId = , OrderDate = 16/08/2011 9:12:00 PM } - 这不是我追求的目标。

当我双击一行时,我想获得OrderId。

我的XAML设置如下:

<DataGrid AutoGenerateColumns="True" Name="dataGrid1" DataContext="{Binding}" ItemsSource="{Binding}" HorizontalGridLinesBrush="#4D0090FF" VerticalGridLinesBrush="#A30091FF" AlternatingRowBackground="#200098FF" BorderThickness="0" ClipToBounds="False" MouseDoubleClick="dataGrid1_MouseDoubleClick" Margin="0,25,0,0" VerticalAlignment="Stretch"></DataGrid>

我正在成功获取数据库信息(基于MSDN教程),如:

    private void ViewOrders()
    {
        ObjectQuery<Order> orders = dEntities.Orders;

        var query = from order in orders
                    orderby order.OrderStatus
                    select new
                    {
                        order.OrderId,
                        order.UserId,
                        order.OrderTotal,
                        order.Freight,
                        order.DeliveryStatus,
                        order.OrderStatus,
                        order.TransactionId,
                        order.OrderDate
                    };
        dataGrid1.ItemsSource = query.ToList();
    }

1 个答案:

答案 0 :(得分:3)

好的,简单的SelectedItemSelectedItems[0]会为您提供一行。但是你的行是一种匿名类型,这使得OrderID变得有点困难。

简单的方法是简单地选择order项并显示它。在网格中设置列定义以选择要显示的属性。

另一种方法是定义class DisplayOrder,然后更改Linq查询:

   select new DisplayOrder
   {
       order.OrderId,
       ...
   };

在这两种情况下,您只需从网格中访问SelectedItem.OrderID即可。

  var row = (DisplayOrder) datagrid1.SelectedItem;  // or (Order)
  int Id = row.OrderID;