2011-08-21 60 views
1

我想从WPF中的DataGrid中获取选定的行值,它证明是非常令人沮丧的。虽然在WinForms中很简单。获取选定的行值

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

我已经使用了几个我在网上找到的代码片段,它们都给了我整行的内容,包括列名!

我曾尝试:

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> 

而且我成功地获得DB信息(基于关闭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

“SelectedItem”究竟出了什么问题?如果你想要一个详细的答案,请提供一些细节。你有什么约束力,以及如何? –

+0

Thanks @Henk,我用我的代码更新了我的问题以及我试过的东西等。 – bendr

+1

您是否尝试过类似Order Order = dataGrid.SelectedItem作为Order,然后var orderId = order.OrderId? –

回答

3

OK,简单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; 
+0

噢,这是一个很好的解决方案。非常感谢你@亨克。 :) – bendr