ASP.NET筛选器带有复选框的结果

时间:2011-02-16 17:23:57

标签: c# asp.net sql-server

我列出了大约20种产品,每种产品最多包含30种可能的属性。我试图找出在表单上使用复选框(表示30种可能的属性)来过滤产品的最佳方法,以便只显示具有匹配属性的产品。我可以使用SQL Server 2005,但似乎可能有点矫枉过正。有什么建议吗?

(附加)编辑:好的,鉴于下面的数据结构,您如何查询数据库以返回具有所有匹配功能的产品?假设产品#1具有功能1,2和3.产品#2具有功能2,3和4.功能1和3的查询应返回产品#1,而不返回产品#2。


Products table
productID int
productname nvarchar(50)

Features table
featureID int
featurename nvarchar(50)

FeatureMap table
featuremapID int
productID_fk int
featureID_fk int

3 个答案:

答案 0 :(得分:2)

首先,您将收集用户从UI中选择的属性

List<string> filter = this.GetAttributeFilterFromUI();
string featureNamesParam = "(" + string.Join(",", filter) + ")";

然后您应该能够使用参数化查询,其SQL类似于:

SELECT ProductID FROM Products P
JOIN FeatureMap FM ON FM.ProductID = P.ProductID
WHERE FM.featureID_fk IN
(SELECT FeatureID FROM Features WHERE featurename IN @FeatureNames)

答案 1 :(得分:1)

数据库可以正常工作。如果您的产品的属性是固定的,您可以使用您的产品ID / Name创建一个表,并且每个属性将位于名为“IsGreen”,“IsBlue”,“HasWarrant”等的布尔/位类型的列中。您认为随着时间的推移可能会添加或删除属性,您需要设置“属性”,“产品”和“ProductAttribute”表以相应地匹配产品和属性。

然后,您可以设置ASP.Net网页以使用具有所有可用选项的CheckBoxList控件。然后,您可以浏览此列表中的复选框项列表,以确定已选择了哪些值,并从那里设置数据库查询。

如果您希望对搜索结果采用“动态”方法,请将CheckBoxList的AutoPostBack属性设置为“true”,然后每次选中或取消选中复选框时,都会触发SelectedIndexChanged,您可以更新搜索结果相应。这样,用户不必每次都按下“搜索”按钮。

答案 2 :(得分:0)

您好SQL Server不会过度使用,您可以非常轻松地使用它来创建Product表并插入数据。在告诉我们您为表创建的架构后,我们可以看到如何处理这个问题。