【问题标题】:DataGridView, databinding, and ComboBox filteringDataGridView、数据绑定和 ComboBox 过滤
【发布时间】:2010-08-21 13:59:07
【问题描述】:

我有一个 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 的价格列显示数据集第二个表中的价格。

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

我不确定如何实现。 有什么指点或例子吗?

提前非常感谢!

我正在使用 C# 和 WinForms 在 VS 2008 上进行开发。

【问题讨论】:

  • 你能贴出你用来为每一行创建组合框的代码吗?那是需要更改的代码,因为它需要被过滤。看到该代码将有很大帮助!
  • 没什么复杂的,只需创建一个 DataGridViewComboBoxColumn 并使用 dataGridViewInstance.Columns.Add 方法将其添加到我的 DataGridView 中,并使用 DataSource、ValueMember 和 DisplayMembers 属性将此列绑定到我的数据集表。

标签: c# winforms ado.net datagridview


【解决方案1】:

看起来您不需要将组合绑定到数据源而是直接绑定到对象。该对象是按 productID 分组的价格列表

【讨论】:

  • 抱歉,您能详细说明一下吗?或者也许有一个例子?谢谢。
  • 我的意思是将组合绑定到一个 List 对象。此列表创建为 ProductId= currentID 的价格选择。
  • 我想如果它是一个外部组合框,我确实可以这样做,但是这里的组合框在 dataGridView 内,是否有一个事件我可以做出反应,以便根据 ID 提供过滤后的列表当前行?
  • 我认为单击一行可以处理该事件并将当前 procuctID 绑定到该行。无论如何,这只是我的建议。
  • 我已经通过两个绑定源对其进行了整理。一个使用 DataRelation 过滤并且我在 EditingControlShowing 上设置的,它过滤 ComboBox 中当前行的记录。我在 CellEndEdit 事件中将其设置回未过滤的绑定源。
猜你喜欢
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 2015-12-02
  • 2016-02-07
相关资源
最近更新 更多