【问题标题】:Query based on 1 or multiple fields filled in根据填写的 1 个或多个字段进行查询
【发布时间】:2018-01-04 15:03:03
【问题描述】:

我确信这非常简单,但我正在画一个空白。我有 5 个文本框用于搜索。如果填充了 TextBox1,则填充 GridView1,为 GridView2 填充 TextBox2 等。然后,如果仅填充 TextBox1 或仅填充 TextBox2,我还有 4 个可以填充的 GridView,但如果两者都填充,则也可以填充。另一个 GridView 将根据被填充的 1 或 3 个 TextBox 填充。

除了 Switch 或 500 If 方案之外,还有其他方法可以根据填充的 1 到 3 个搜索字段来编写 GridView 代码吗?

【问题讨论】:

  • 你应该更具体一点,并展示一个 sql 代码和/或 asp.net 代码的示例。
  • @Nino 好的,让我们看看一个 GridView。 5 个搜索框:CompanyID、CustomerNumber、LocationID、MarketerNumber 和 MeterNumber。如果 CustomerNumber 是唯一填充的框、LocationID 或 MarketerNumber,则可以填充此 GridView。如果 CustomerNumber AND LocationID,或 CustomerNumber AND MarketerNumber,或 LocationID AND MarketerNumber,也可以填充它。因此,简而言之,7 个不同的数据集取决于所填写的搜索/过滤器的数量。

标签: c# asp.net search


【解决方案1】:

使用 LINQ。从一个基础数据集开始,然后根据下一个 TextBox 是否为空对其进行过滤。

【讨论】:

    【解决方案2】:

    在这种情况下,我通常会定义一个带有多个输入参数的特定搜索查询,它会检查每个参数是否具有值。

    例如

    -- This part only if you use ODBC connection, it you use SQL Client connection you don't need it
    declare @CompanyID int
    declare @CustomerNumber int
    declare @LocationID int
    declare @AnotherFilter varchar(100)
    
    SELECT @CompanyID=?, @CustomerNumber=?, @LocationID=?, @AnotherFilter=?
    
    -- End ODBC specific
    
    SELECT *
    FROM Your_table
    WHERE
    (COMPANY_ID=@CompanyID OR @CompanyID=0)
    AND
    (CUSTOMER_NUMBER=@CustomerNumber OR @CustomerNumber=0)
    AND 
    (LOCATION_ID=@LocationID OR @LocationID=0)
    AND
    (ANOTHER_FIELD=@AnotherFilter OR @AnotherFilter='')
    

    您可以将其放入 GridView 的 SQLDataSource 或 ObjectDataSource 中

    【讨论】:

    • 这是假设他们填写了每个文本框。假设他们不填写 LocationTextBox,那么 WHERE 子句的 AND 将不返回任何内容。
    • 您将 GridView 与 ObjectDataSource 链接,在此您引用了一个测试参数并将默认值传递给 tue 查询的方法
    猜你喜欢
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2017-01-02
    • 2019-03-30
    相关资源
    最近更新 更多