如何获得数据网格单元格的字段

本文关键字:单元格 字段 网格 数据网 何获得 数据 | 更新日期: 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个:

那又怎样?问题是你得到了额外的一列?显式定义列,只定义需要的列。