【问题标题】:How to read the value in the first cell in a selected row of a Datagrid?如何读取 Datagrid 选定行中第一个单元格中的值?
【发布时间】:2011-01-30 15:07:32
【问题描述】:

我有一个数据网格,其中包含来自两个不同表的数据,分别称为 ITEMS 和 ORDER_ITEMS。 数据网格的格式是这样的 - 物品编号 |商品名称 |单价 |数量 |金额

这里,ItemID、ItemName、Price 列属于ITEMS 表,Quantity 和Amount (amount = price*quantity) 列属于ORDER_ITEMS 表。

所以我在将所选行创建为ITEMS 类型的新对象(或实例)以捕获ItemID 时遇到了一些问题。如何读取“选定”行的 ItemID 属性?


更新: 当我尝试使用以下代码(根据 John K. 给出的语法)时,我收到了错误 - Error 1 'Microsoft.Windows.Controls.DataGrid' 不包含 'SelectedRows' 的定义并且没有扩展名可以找到接受“Microsoft.Windows.Controls.DataGrid”类型的第一个参数的方法“SelectedRows”(您是否缺少 using 指令或程序集引用?)

     string id = selectedItemsGrid.SelectedRows[0].Cells[0].Text;

我找到了一些关于这个问题的信息。刚刚在 Microsoft Library 中发现它位于命名空间 System.Windows.Forms.dll 中。但我现在使用的是 Windows Presentation Foundation。您认为这与我目前面临的问题有关吗?

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    假设 ItemId 在数据网格的第一 (0) 列中...所选行将返回一个数组,因此如果仅选择了 1 行,则第一个 (0) 元素将包含该行...

    试试:

    string  strVal =  DataGridView1.SelectedRows[0].Cells[0].Text;
    

    【讨论】:

    • 感谢您的回复。我尝试过这个。但我在 IntelliSense 中看不到 SelectedRows。如果我自己键入它,Visual Studio 会给出错误读取 'Microsoft.Windows.Controls.DataGrid' 不包含'SelectedRows' 的定义,并且没有扩展方法'SelectedRows' 接受类型为'Microsoft 的第一个参数.Windows.Controls.DataGrid' 可以找到(您是否缺少 using 指令或程序集引用?) PS:我也尝试过 SelectedRow。它也没有工作。
    • 看起来这个答案是针对 DataGridView,它是一个 WinForms 控件,而不是您正在使用的 WPF DataGrid。
    【解决方案2】:

    使用 DataGrid.CurrentItem 属性。这为您提供了数据绑定到当前行的对象。比如:

    class DataClass {
       string ID { get; set; }
       ...
    }
    
    ...
    
    DataClass current = (DataClass)dataGrid.SelectedItem;
    string id = current.ID;
    

    【讨论】:

    • 哦,是的,这将使对象绑定到当前行。但它给了我错误。问题是,行是多个对象的组合(在我的例子中,它是 2)。所以我无法使用行值来实例化这两种类型的实例。
    • 顺便说一句,我现在收到此错误 - 无法将类型为“f__AnonymousType2`2[Business.ITEM,Business.ORDER_ITEM]”的对象转换为类型“Business.项目'。
    • 是的,这是一个不能转换为匿名类型的问题。您可以 1)使用反射 2)如果您在 .Net 4 中,则转换为动态或 3)创建数据类而不是使用匿名类型
    • 非常感谢。我会尝试第三个。这似乎是最简单的一个,因为我没有时间学习反射,而且我无法在我的戴尔 Mini 10v 上运行 VS 2010。 我很快就会在这里发布结果。 :) 再次,非常感谢你的好主意。 :-)
    • 这项工作:向数据类 ORDER_ITEMS 添加了另外两个属性。来自你的回答。感谢一百万的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多