2010-08-21 75 views
1

我有一个DataGridView中有一个ComboBox列,显示可能的价格,我想只显示与特定行有关的价格。DataGridView,数据绑定和组合框过滤

更详细地说,假设我有一个类方法,它返回一个包含2个表的数据集(由在SQL Server 2005数据库上运行的存储过程提供)。

第一个表包含订单明细行,第二个表包含每个产品有效的价格。

基本上,我的DataTables从数据集看起来像这样。

OrderDetails 

ProductType | ProductID | Qty | SelectedPrice  | 
DairyProduct | Milk  | 5 | 5.50    | 
Fruit  | Orange | 7 | 6.90    | 

等等...

在从数据集中我的价格表,我把所有的价格适用于所有产品的订单日期。

Prices 

ProductType | ProductID | Price  | 
DairyProduct | Milk  | 5.50 | 
DairyProduct | Milk  | 6.90 | 
DairyProduct | Milk  | 7.90 | 
Fruits  | Orange | 6.90 | 
Fruits  | Orange | 4.50 | 

等等...

我我OrderDetails表绑定到一个DataGridView,该用户将需要修改。

我想DataGridView的价格列显示数据集的第二个表中的价格。

我已经设法做到了这一点,我现在每行都有一个组合框,但组合框显示我价格表中的所有价格,我想要的是只显示价格有效的价格该特定产品。 例如,如果用户单击Milk行上的DataGridView,它应该只显示牛奶的价格,而不是所有的价格。

我不知道如何实现。 任何指针或示例?

非常感谢!

我正在开发VS 2008,C#和WinForms。

+0

您可以发布您用于为每行创建组合框的代码吗?这是需要更改的代码,因为它需要被过滤。看到代码将会有很大帮助! – InSane 2010-08-21 14:07:57

+0

没什么复杂的,只是创建一个DataGridViewComboBoxColumn并使用dataGridViewInstance.Columns.Add方法将其添加到我的DataGridView,并使用DataSource,ValueMember和DisplayMembers属性将此列绑定到我的数据集表。 – 2010-08-21 14:30:05

回答

2

看起来像你需要将组合不直接绑定到数据源,而是绑定到对象。该对象是按产品ID分组的价格列表

+0

对不起,您可以请扩展一下吗?或者用一个例子?谢谢。 – 2010-08-21 15:00:52

+0

我的意思是绑定组合到List对象。此列表创建为ProductId = currentID的价格选择。 – Arseny 2010-08-21 15:11:08

+0

我想我可以做到这一点,如果它是一个外部组合框,但这里的组合框是在dataGridView中,是否有一个事件我可以作出反应,以提供基于当前行的ID的过滤列表? – 2010-08-21 15:17:18