2011-04-25 46 views
0

例如,我有一個gridview和兩個文本框。你如何有一個GridView的多個控件?

一個文本框用於搜索文本。 第二個文本框是要搜索的訂單號。

我想我的gridview基於一個或另一個填充。我不知道如何告訴我的表單,如果用戶使用數字搜索,如果名稱,而不是搜索。

感謝您的任何幫助。

+0

你能分享你用來訪問你的數據的sql查詢嗎? – 2011-04-25 21:11:01

+0

這只是一個可數據的可視化查詢。 – johnny 2011-04-25 21:18:40

+0

你有一個提交按鈕,或者你想過濾丟失的焦點 – 2011-04-26 16:27:32

回答

0

您可以通過檢查文本框(TextBox1.Text.Trim.Length> 0)或(TextBox1.Text =「」)

+0

然後根據在文本框中發現的值,你可以使用ifelse來使用邏輯進行過濾 – 2011-04-26 16:35:28

+0

檢查texbox是否爲空的更爲接受的形式是'String.IsNullOrEmpty(TextBox1.Text)' – pseudocoder 2011-05-02 14:30:33

0

這聽起來像你真正要問的是如何基於多個可能的過濾器參數來過濾數據源。解釋這將需要知道你的數據源是什麼。無論哪種方式,gridview只是要顯示過濾的結果,對吧?

如果您將SQL用於數據源,則該技術將與在內存中過濾集合完全不同。所以更多的信息會有所幫助。

2

OK,希望你還沒有解決這個還沒有,因爲我花了幾分鐘想出一個我認爲會做你想要的東西的例子。

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仍將綁定由於SqlDataSource.CancelSelectOnNullParameter = False但空參數將不由於設置了ControlParameter.DefaultValue,所以與查詢一起發送。存儲過程然後將NULL值插入參數中,並基本上跳過WHERE子句中的那部分過濾。

希望這會有所幫助。

相關問題