获取选定的行值 [英] Getting Selected Row Value
问题描述
我正在尝试从WPF中的DataGrid获取选定的行值,事实证明这非常令人沮丧。
I am trying to get the selected row value from a DataGrid in WPF, and it's proving to be very frustrating. It's simple in WinForms, though.
如何从wpf的datagrid控件中获取选定的或单行值?
How can I get the selected or a specified single row value from a datagrid control in wpf?
我用了一些我在网上找到的代码片段,它们都给了我整行的内容,包括列名!
I have used several snippets i've found online, and all of them give me the contents of the whole row, including the column names!
我尝试过:
string value = dataGrid1.SelectedItems[0].ToString();
string value = dataGrid1.SelectedCells[dataGrid1.SelectedItems[0]].ToString();
我在wpf控件部分下查看了MSDN,但看不到如何获得行值。
I've looked on MSDN under the wpf controls section but can't see how I can get a row value anywhere.
我一直回想的是:
{OrderId = d#dfuzJRo,UserId = 56,OrderTotal =,货运=,DeliveryStatus =,OrderStatus =待定,TransactionId =,OrderDate = 16/08/2011 9:12:00 PM}
-这不是我要的。
All I keep getting back is:
{ OrderId = d#dfuzJRo , UserId = 56, OrderTotal = , Freight = , DeliveryStatus = , OrderStatus = Pending, TransactionId = , OrderDate = 16/08/2011 9:12:00 PM }
- which isn't what I'm after.
当我双击行时,我想获得OrderId。
I would like to get the OrderId when I double-click on a Row.
我的XAML设置如下:
My XAML is setup like:
<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教程),例如:
And I am getting DB info successfully (based off of MSDN tutorial) like:
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
或 SelectedItems [0]
会给您该行。但是您的行是匿名类型,这使得获取 OrderID
有点困难。
OK, the simple SelectedItem
or SelectedItems[0]
will give you the row. But your row is an anonymous type, that makes getting the OrderID
a little difficult.
简单的方法是只需选择订单
项目并显示该项目即可。在表格中设置列定义以选择要显示的属性。
The simple approach is to simply select the order
item and display that. Set up column definitions in the grid to select which properties to show.
另一种方法是定义类DisplayOrder
,然后更改Linq查询:
The alternative is to define a class DisplayOrder
, and then change the Linq query:
select new DisplayOrder
{
order.OrderId,
...
};
在两种情况下,您都可以轻松访问 SelectedItem.OrderID
从网格。
In both cases, you can simply access SelectedItem.OrderID
from the grid.
var row = (DisplayOrder) datagrid1.SelectedItem; // or (Order)
int Id = row.OrderID;
这篇关于获取选定的行值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!