【问题标题】:ASP.NET filter results with checkboxes带有复选框的 ASP.NET 过滤结果
【发布时间】:2011-06-28 12:49:02
【问题描述】:

我有一个大约 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

【问题讨论】:

  • 您的产品是否已经在数据库中?如果是,您如何识别每个产品的属性?
  • @Dillie-O - 我收到了一份论文清单。这基本上是用于营销目的的功能页面。
  • 如果你不使用SQL,你用什么来存储你的产品和属性?
  • @Jeff - 我考虑过使用数据表。

标签: c# asp.net sql-server


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 相应地将“Attribute”和“ProductAttribute”替换为“Feature”和“ProductFeature”,我现在才看到您的更新。 8^D
    • >"然后您可以浏览此列表中的复选框项目列表以确定已选择哪些值并从那里设置您的数据库查询。"这是我坚持的部分。我真的不知道如何编写这个查询。唯一想到的是使用内联 SQL,将每个选择附加为“和”,但我仅限于存储过程。
    • 存储过程非常适合这样的事情。查看以下关于如何生成存储过程的问题:stackoverflow.com/questions/205526/…
    【解决方案3】:

    首先,您将收集用户从您的 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-10
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 2014-08-27
      • 2023-04-05
      相关资源
      最近更新 更多