【问题标题】:How do you have multiple controls for a gridview?如何为 gridview 提供多个控件?
【发布时间】:2011-04-25 19:29:00
【问题描述】:

例如,我有一个 gridview 和两个文本框。

一个文本框用于搜索文本。 第二个文本框是要搜索的订单号。

我希望我的 gridview 基于一个或另一个来填充。我不知道如何告诉我的表单用户是否使用数字搜索,如果是名称,则使用该名称搜索。

感谢您的帮助。

【问题讨论】:

  • 您能分享一下您用来访问数据的 sql 查询吗?
  • 这只是一个数据表的可视化查询。
  • 你有提交按钮,或者你想过滤焦点丢失

标签: asp.net gridview webforms


【解决方案1】:

好的,希望你还没有解决这个问题,因为我花了几分钟时间想出了一个例子,我认为它几乎可以满足你的需求。

DB 访问使用存储过程,但您可以将 ObjectDataSource 与 DAL 一起使用,或者只是内联 SqlDataSource 上的 SQL 语句等。

标记:

Product ID:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:CompareValidator ID="CompareValidator1" ControlToValidate="TextBox1" runat="server" ErrorMessage="You must enter a number"
    ValidationGroup="vg1" Type="Integer" Operator="DataTypeCheck"></asp:CompareValidator>
<br />
Description:
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />
<asp:Button ID="cmdSearch" runat="server" Text="Search" ValidationGroup="vg1" /><br />
<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1">
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" SelectCommand="spGetProducts"
    CancelSelectOnNullParameter="False" SelectCommandType="StoredProcedure">
    <SelectParameters>
        <asp:ControlParameter ControlID="TextBox1" PropertyName="Text" DbType="String" DefaultValue="" />
        <asp:ControlParameter ControlID="TextBox2" PropertyName="Text" DbType="Int32" DefaultValue="" />
    </SelectParameters>
</asp:SqlDataSource>

以及用于查询的 T-SQL:

CREATE PROCEDURE spGetProducts
    @ProductId int = NULL
    ,@ProductDescription nvarchar(100) = NULL
AS
BEGIN
    SELECT [ProductId]
        ,[ProductDescription]
    FROM [Products]
    WHERE (
        (
            (@ProductId IS NULL)
            OR
            ([ProductId] LIKE % + @ProductId + %)
        )
        AND
        (
            (@ProductDescription IS NULL)
            OR
            ([ProductDescription] LIKE % + @ProductDescription + %;)
        )
    );
END

如果用户没有在任何一个字段中输入任何内容,由于SqlDataSource.CancelSelectOnNullParameter = False,SqlDataSource 仍将绑定,但由于设置了ControlParameter.DefaultValue,因此不会将空参数与查询一起发送。然后存储过程会将 NULL 值插入到参数中,并基本上跳过 WHERE 子句中的过滤部分。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您可以使用 (TextBox1.Text.Trim.Length > 0) 或 (TextBox1.Text = "") 来检查文本框

    【讨论】:

    • 然后根据文本框中输入的值,您可以使用 ifelse 来使用过滤逻辑
    • 比较接受的检查 texbox 是否为空的形式是 String.IsNullOrEmpty(TextBox1.Text)
    【解决方案3】:

    听起来您真正要问的是如何根据多个可能的过滤器参数过滤数据源。解释这一点需要知道您的数据源是什么。不管怎样,gridview 只会显示过滤后的结果,对吧?

    如果您使用 SQL 作为数据源,则该技术将与在内存中过滤集合完全不同。因此,有关这方面的更多信息会有所帮助。

    【讨论】:

      猜你喜欢
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      相关资源
      最近更新 更多