我正在尝试从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();
}
答案 0 :(得分:3)
好的,简单的SelectedItem
或SelectedItems[0]
会为您提供一行。但是你的行是一种匿名类型,这使得OrderID
变得有点困难。
简单的方法是简单地选择order
项并显示它。在网格中设置列定义以选择要显示的属性。
另一种方法是定义class DisplayOrder
,然后更改Linq查询:
select new DisplayOrder
{
order.OrderId,
...
};
在这两种情况下,您只需从网格中访问SelectedItem.OrderID
即可。
var row = (DisplayOrder) datagrid1.SelectedItem; // or (Order)
int Id = row.OrderID;