2016-09-08 7 views
-1

私は3層アーキテクチャを使用してウェブサイトを開発しています。私は、検索バーのどのユーザータイプに基づいて製品を表示するための検索機能を開発する必要があります。デバッグすると、検索値がProductBLのGetProductInfoページに渡されていないことがわかります。ここ はコードです:Gridviewで商品を検索しようとしています

protected void Search(object sender, EventArgs e) 
    { 
     string searchString = Request.QueryString["ProductName"]; 
     Product product = new Product(); 

     product.ProductName = txtSearch.Text.Trim(); 

     ProductBL.GetProductInfo(searchString); 
    } 

ProductBLコードGetProductInfo方法について:

public static DataTable GetProductInfo(string searchString) 
    { 
     string query = "SELECT * FROM [Products] where ProductName like @SearchString and Visible = 1"; 
     SqlCommand cmd = new SqlCommand(query); 
     cmd.Parameters.AddWithValue("@SearchString", SqlDbType.Text).Value = searchString; 
     return DbUtility.GetRecordsInDataTable(cmd); 
    } 

GridViewのページ:

Search: 
    <asp:TextBox ID="txtSearch" runat="server" /> 
    <asp:Button Text="Search" runat="server" OnClick="Search" /> 
    <hr /> 
    <br /> 
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID" CssClass="footable" 
     OnRowDeleting="DeleteRecord" EmptyDataText="There are no data records to display." 
      CellPadding="4" ForeColor="#333333" GridLines="None"> 
     <AlternatingRowStyle BackColor="White" /> 
親切

あなたのクエリを設定していないこの

+0

*何それは意味ですか?検索文字列がここにないのですか? 'GetProductInfo(string searchString)' –

+0

@Divこれはエラーです。パラメータ化されたクエリ '(@SearchString nvarchar(4000))SELECT * FROM [Products]ここで、Pro'はパラメータ '@SearchString'が必要です。 – Orion

+0

このように変更します。 "SELECT * FROM [製品]ここでProductNameは '%' + SearchString + ''およびVisible = 1 'のようになります。 –

答えて

0

変更

string searchString = Request.QueryString["ProductName"]; 

あなたはとして機能するようにsearchStringを送信しているので:私はビジネスロジックに検索文字列値を渡すことはできませんよ*

GridView1.DataSource = ProductBL.GetProductInfo(searchString); 
GridView1.DataBind(); 
+0

これは私のために働く。エラーはありません。しかし、すべての値を表示するグリッドビュー。テキストボックスに入力した商品を表示したいだけです。 – Orion

+0

試しましたか?SELECT * FROM [製品]ここでProductName = @SearchString – Sami

+0

確かに、検索後、コード内のどこかでGridViewが再度バインドされていません。 – Sami

0

で私を助けて正しく。まず、SQLのエディタでクエリをチェックしてみてください。

ここに問題があります。

like @SearchString 

Productsテーブル内のレコードが存在することになる場合、それは、クエリによって取得します

SELECT * FROM [Products] where ProductName like '%SearchString%' and Visible = 1 

の下のようなものに変更し、それを。

はまた、ワイルドカード役立ちます

https://support.microsoft.com/en-in/kb/98434

希望の使用方法を見てみましょう。

0

あなたのワイルドカード条件が間違っているようです: コメントごとに次のようにクエリを変更する必要があります。ここで

string query = "SELECT * FROM [Products] where ProductName like where name like '%' + replace(SearchString, '%', '[%]') + '%' and Visible = 1"; 

クエリは次のように思える:それはあなたに、より適切な結果を与えるでしょうselect * from tablename where Column like '%[%]%'

string searchString = txtSearch.Text.Trim(); 

+1

はい。ワイルドカード状態に問題がありました。ありがとうたくさん – Orion