假设我在数据库中有一系列表,其中包含(例如)有关一系列餐厅菜单项的信息。因此,例如,我们有 10 个表:
Rest_1, Rest_2, Rest_3, .... Rest_10
(Names being more complex, though, in the real situation)
并且每个表都有完全相同的列结构,比如说(只是为了说明目的而编造这个,所以请原谅这个例子的弱点):
Col1 (Primary Key) = Menu_Item
Col2 = Menu_Category (Desert, Appetizer, ...)
Col3 = Item_Cost
Col4 = Item_SalePrice
Col5 = Item_Popularity
Col6 = Seasonal_Item (Boolean - Is it seasonal)
Col7 = Min_Order (Boolean - Is there a minimum order from the vendor)
Col8 = In_Stock (Boolean - Is it in stock now)
....
现在,我有一个带有 3 个组合框和一个复选框的 Windows 窗体:
cboRestaurant
cboMenuCategory
cboPopularity
ckInStock
还有一个 DataView,它根据用户上面的选择,显示正确的(过滤的)信息,然后可以用于处理某些东西。
所以,我的情况是我们会:
- 填充餐厅组合框
- 根据用户选择的 cboRestaurant 和 ckInStock.checked 状态,填充 cboMenuCategory 组合框
- 基于 1 和 2,填充 cboPopularity 组合框
- 根据用户为所有组合框/复选框选择的内容,填充数据视图。
...再次,我知道这是一个弱例子,但我试图传达这个概念。
所以......根据我在网上收集到的信息,我认为实现这一目标的最佳案例是:
- 查询每个表并将结果存储在 DataTable 中(我可以这样做)
- 将这些数据表存储在数据集中(我可以这样做)
我不知道该怎么做是让数据集知道所有数据表是如何相关的(都具有相同的列名)并将组合框绑定到数据集,例如根据之前选择的内容过滤信息组合框。
或者
创建一个包含所有表中所有这些变量的列表(自定义对象),然后基于combobox.SelectedIndexChanged
\ckInStock.CheckedChanged
事件创建该列表的 Linq-Query - 这似乎更糟,因为我们不断地查询和重新查询。
所以,我的第一个问题是:
如果解决方案 #1 是正确的,我如何创建综合数据集并根据前面的组合框和复选框值让组合框具有正确的过滤数据?
我的第二个问题是:
有没有更好的方法来完成这个我只是不知道的 - 一个内置的更好的对象,为你做级联过滤,或者如何最好地完成这个?