【问题标题】:Loop through datagrid [closed]循环遍历数据网格[关闭]
【发布时间】:2012-09-27 08:04:49
【问题描述】:

如何从 wpf datagrid 中获取项目数据:

商品值为{ ProductId = 1, Name = "fruit", Quantity = 1, Price = 100.0 },类型为匿名类型。

代码:

foreach (var item in this.dgProductList.Items)

已编辑

这就是我添加行的方式:

this.dgProductList.Items.Add(new { ProductId = product.ProductId, Name = product.Name, Quantity = 1, Price = product.Price });

【问题讨论】:

  • 你试过item.ProductId, item.Name, item.Quantity, item.Price吗?不使用 wpf 对我来说才有意义。
  • 如何将您的集合绑定到数据网格?你能发布更多代码吗?
  • 只需将您的 datagrids itemssource 属性绑定到 Product Collection 并使用此集合执行所有操作、查询、添加、删除...它更简单、更简洁,您不必在如何访问网格中的项目...

标签: c# wpf


【解决方案1】:

考虑到您用WPF 标记问​​题,会说:

不要对UI 采取行动。如果您需要查找某些内容,请在 Model 一侧找到它。之后,如果您需要UI 以某种方式作用于已创建的项目,请作用于ModelView 以将UI 更改推送到屏幕上。

简而言之:不要对WPF 中的UI 采取行动,因为UI 很容易成为更改的主题,并且您的代码会中断。使用强大的数据绑定 WPF 为您提供的优势。

【讨论】:

  • 我没有使用 ItemsSource="{Binding}。
  • @KevFixx:嗯,这就是重点。最好开始使用它。如果不这样做,只需使用 WindowsForms
【解决方案2】:

首先我必须说我同意 Tigran,如果您使用 WPF,建议的方法是利用数据绑定。

在您的特定情况下,您不使用数据绑定,而是将匿名类型添加到数据网格,然后您想稍后检索它们。

起初我建议不要使用匿名类型,而是为 Product 创建一个类。

无论如何,如果您想继续使用匿名类型,您可以应用建议的解决方案 here

祝你好运。

【讨论】:

    【解决方案3】:

    就像在之前的答案中告诉你的那样,你应该考虑使用 WPF-Binding。

    但如果你真的不想,你可以试试这个,但它不是“WPF方式”:

    object objectToFind = new { ProductId = 1, Name = "fruit", Quantity = 1, Price = 100.0 }; //create the object which should be found in your datagrid.
    
    object result = dg.Items.Cast<object>().ToList().Find(o => o.Equals(objectToFind)); //find the object
    

    【讨论】:

    • 好的,我会尝试数据绑定,很难做到。
    猜你喜欢
    • 2023-03-20
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 2016-01-31
    • 1970-01-01
    • 2017-05-21
    相关资源
    最近更新 更多