0

假设我们有一个Customer类,它有一个Orders的子对象。在我们的 Winforms 应用程序中,我们可能会将主窗体绑定到一个客户列表。主窗体上的网格列出了客户的订单

这都是基本的主/细节winforms。我们可以将 设置CustomerBindingSource.DataSource到我们的客户列表中。网格DataSource也是 CustomerBindingSourceDataMember是一个字符串“订单”。Orders作为 的财产Customer

在运行时,我想以订单集合的形式访问网格的内容。就我而言(出于各种原因),我只能访问网格及其内容,无法访问原始客户(因此无法参考Customer.Orders

我想使用类似这样的伪代码来访问网格的订单列表:

CType(CType(OrdersGrid.DataSource, BindingSource).DataSource, Orders)

但是,这当然行不通。在这种经典的 Master/Detail 表单DataSource中,Grid 实际上是CustomerBindingSource对象,而 order 只是一个DataMember,我只能作为字符串访问。

有什么方法可以通过网格到达Orders集合?

4

2 回答 2

1

这应该这样做(徒手打字):

var orders = ordersGrid.Rows.Select(row => row.DataBoundItem).Cast<Order>();
于 2011-10-26T17:20:28.813 回答
1

除非我误读了您,否则您应该能够通过绑定源访问当前客户。

Customer c = bs.Current as Customer;

if (c != null)
{
    Orders o = c.Orders;
}

您也可以使用 GertArnold 提出的方法,但您需要修改他的代码,因为 DataGridViewRowCollection 没有实现 IEnumerable。

var orders = dataGridView1.Rows.Cast<DataGridViewRow>() 
               .Select(row => row.DataBoundItem).Cast<Orders>();
于 2011-10-26T17:24:46.323 回答