【问题标题】:Getting Selected Row Value获取选定的行值
【发布时间】:2011-08-21 13:37:22
【问题描述】:

我试图从 WPF 中的 DataGrid 中获取选定的行值,但事实证明这非常令人沮丧。不过,在 WinForms 中这很简单。

如何从 wpf 中的 datagrid 控件中获取选定的一个指定的单行值?

我用了几个网上找的sn-ps,都给了我整行的内容,包括列名!

我试过了:

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

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

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

我不断回复的是: { 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();
    }

【问题讨论】:

  • SelectedItem 到底有什么问题?如果您想要详细的答案,请提供一些详细信息。您要绑定什么以及如何绑定?
  • 谢谢@Henk,我已经用我的代码和我尝试过的内容等更新了我的问题。
  • 你试过Order order = dataGrid.SelectedItem as Order,然后var orderId = order.OrderId
  • @jase: 选中的项目是一整行。
  • @Henk,嘿嘿,我现在觉得自己很傻吗。

标签: c# .net wpf datagrid


【解决方案1】:

好的,简单的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;

【讨论】:

  • 哇,这是一个不错的解决方案。非常感谢@Henk。 :)
猜你喜欢
  • 2023-03-07
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 2012-11-11
  • 2015-10-10
  • 1970-01-01
相关资源
最近更新 更多