如何获得数据网格单元格的字段
本文关键字:单元格 字段 网格 数据网 何获得 数据 | 更新日期: 2023-09-27 18:08:32
在我的WPF应用程序中,我有一个包含DataGrid的窗口(所有代码)。这是我的DataGrid绑定:
using (var db = new CompanyEntities())
{
var stocks = db.Stock;
var query = from s in stocks
select new { s.Id_Product, s.Quantity };
dataGrid.ItemsSource = query.ToList();
}
我想读取在DataGrid中选择的单元格。我试着用DataGrid读取它。SelectedItem,但是要获得项目,我必须将其转换为某种类型。我不能使用股票类,因为我的DataGrid单元格包含3个股票字段中的2个。因此,我创建了另一个类来表示DataGrid单元格:
class TableItem
{
public int Id_Product;
public int? Quantity;
}
试着像这样转换:
TableItem x = (TableItem)dataGrid.SelectedItem;
但是我得到InvalidCastException从类型:
'<>f__AnonymousType0
2[System.Int32,System.Nullable
[System. cn]Int32]] '
到我的TableItem类型。
那么我应该如何得到我的dataGrid的选定单元格?
我的时候:
在我的CompanyEntites构造函数中,我设置:
this.Configuration.ProxyCreationEnabled = false;
现在我可以cast Stock s = (Stock)dataGrid.SelectedItem;
没有例外,在切换ProxyCreation关闭之前,我的SelectedItem是DynamicProxy。股票~ ~类型。
像这样改变你的查询:
var query = from s in stocks
select new TableItem { Id_Product = s.Id_Product, Quantity = s.Quantity };
然后将SelectedItem
转换为TableItem
,现在它实际上是一个。在c#中,仅仅因为它看起来像另一个类,并不意味着它就是另一个类。
// Don't think you need to call ToList() here
dataGrid.ItemsSource = db.Stock;
…并将SelectedItem
转换为任意值。
my DataGrid cells包含3个Stock字段中的2个:
那又怎样?问题是你得到了额外的一列?显式定义列,只定义需要的列。