例如,我有一个gridview和两个文本框。
一个文本框用于搜索文本。 第二个文本框是要搜索的订单号。
我希望我的gridview基于其中一个填充。我不知道如何告诉我的表单,如果用户正在使用数字搜索,如果是名称,而是搜索该名称。
感谢您的帮助。
答案 0 :(得分:2)
好的希望你还没有解决这个问题,因为我花了几分钟的时间想出一个我认为会做你想做的事情的例子。
数据库访问使用存储过程,但您可以将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仍会因SqlDataSource.CancelSelectOnNullParameter = False
而绑定,但由于设置了ControlParameter.DefaultValue
,因此不会随查询一起发送空参数。然后,存储过程将NULL值插入到参数中,并基本上跳过WHERE子句中的过滤部分。
希望这有帮助。
答案 1 :(得分:0)
听起来你真正问的是如何根据多个可能的过滤器参数过滤数据源。解释这将需要知道您的数据源是什么。无论哪种方式,gridview只是显示过滤结果,对吗?
如果您使用SQL作为数据源,那么该技术将与在内存中过滤集合完全不同。所以有关这方面的更多信息会有所帮助。
答案 2 :(得分:0)
您可以使用(TextBox1.Text.Trim.Length&gt; 0)或(TextBox1.Text =“”)
检查文本框