2011-05-28 87 views
0

問:我已設置了dropdownlists用於篩選grid view中的數據。所以,在filter button click我希望它訪問數據庫存儲過程,並帶回所需的數據。如何根據下拉列表值篩選網格視圖

這是我的代碼到目前爲止。和存儲過程,併爲gridview的HTML,以防萬一它錯了。 我的.cs:

public partial class Animals : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     public string FormatURL(object strArgument) 
     { 

      return ("readrealimage.aspx?id=" + strArgument); 

     } 


     protected void btnFilter_Click(object sender, EventArgs e) 
     { 
      SqlConnection MyConnection = new 
      SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString); 

      SqlCommand command = new SqlCommand("sp_SearchAnimals", MyConnection); 

      if (AnimalTypeDDL.Text != "Dont Mind") 
      { 
       AnimalTypeDDL.Text = command.Parameters["@Type_of_Animal"].Value.ToString(); 
      } 


      if (CrossBreedDDL.Text != "Dont Mind") 
      { 
       CrossBreedDDL.Text = command.Parameters["@CrossBreed"].Value.ToString(); 
      } 

      if (SexDDL.Text != "Dont Mind") 
      { 
       SexDDL.Text = command.Parameters["@Sex"].Value.ToString(); 
      } 

      if (SizeDDL.Text != "Dont Mind") 
      { 
       SizeDDL.Text = command.Parameters["@Size"].Value.ToString(); 
      } 

      if (AgeDDL.Text != "Dont Mind") 
      { 
       AgeDDL.Text = command.Parameters["@Age"].Value.ToString(); 
      } 

      if (LocationDDL.Text != "Dont Mind") 
      { 
       LocationDDL.Text = command.Parameters["@Location"].Value.ToString(); 
      } 

      if (RescueDDL.Text != "Dont Mind") 
      { 
       RescueDDL.Text = command.Parameters["@Name"].Value.ToString(); 
      } 

      if (ChildrenDDL.Text != "Select one") 
      { 
       ChildrenDDL.Text = command.Parameters["@Children"].Value.ToString(); 
      } 
      if (OtherCatsDDL.Text != "Select one") 
      { 
       OtherCatsDDL.Text = command.Parameters["@OtherCats"].Value.ToString(); 
      } 
      if (OtherDogsDDL.Text != "Select one") 
      { 
       OtherDogsDDL.Text = command.Parameters["@OtherDogs"].Value.ToString(); 
      } 

      GridView1.DataSource = ds; 
      GridView1.DataBind(); 

      if (GridView1.Rows.Count >= 1) 
      { 
       Panel1.Visible = true; 
       GridView1.Visible = true; 
       lblMsg.Visible = false; 

      } 
      else if (GridView1.Rows.Count < 1) 
      { 
       GridView1.Visible = false; 
       Panel1.Visible = false; 
       lblMsg.Text = "Your search criteria returned no results."; 
       lblMsg.Visible = true; 
      } 

      command.CommandType = CommandType.Text; 
      command.Connection.Open(); 
      SqlDataReader MyDataReader = command.ExecuteReader(); 
      MyConnection.Close(); 

     } 


     protected void buttonClear_Click(object sender, EventArgs e) 
     { 
      AnimalTypeDDL.Text = "Don't Mind"; 
      CrossBreedDDL.Text = "Don't Mind"; 
      SexDDL.Text = "Don't Mind"; 
      SizeDDL.Text = "Don't Mind"; 
      AgeDDL.Text = "Don't Mind"; 
      LocationDDL.Text = "Don't Mind"; 
      RescueDDL.Text = "Don't Mind"; 

     } 
    } 

我的存儲過程:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROC [dbo].[sp_SearchAnimals] 
(
@Type_of_Animal nvarchar(50), 
@CrossBreed nvarchar(50), 
@Sex nvarchar(50), 
@Size nvarchar(50), 
@Age nvarchar(50), 
@Location nvarchar(50), 
@Name nvarchar(50), 
@Children nvarchar(50), 
@OtherCats nvarchar(50), 
@OtherDogs nvarchar(50), 
@Details nvarchar(300) 
) 
AS 
BEGIn 

SELECT 
      AD.Location,AD.Details, R.Name, 
      I.Content 
FROM 
    AnimalDetails As AD INNER JOIN 
    Images As I ON AD.ImageId = I.ImageId, 
    AnimalDetails As DA INNER JOIN RescueDetails As R ON DA.RescueId = R.RescueId 
    WHERE 
    (@Type_of_Animal is NUll OR AD.Type_of_Animal = @Type_of_Animal) AND 
    (@CrossBreed is null OR AD.CrossBreed = @CrossBreed) AND 
    (@Sex is null or AD.Sex = @Sex) AND 
    (@Size is null or AD.Size = @Size) AND 
    (@Age is null or AD.Age = @Age) AND 
    (@Location is null or AD.Location = @Location) AND 
    (@Name is null or R.Name = @Name) AND 
    (@Children is null or AD.Children = @Children) AND 
    (@OtherCats is null or AD.OtherCats = @OtherCats) AND 
    (@OtherDogs is null or AD.OtherDogs = @OtherDogs) AND 
    (@Details is null or AD.Details = @Details) 

    END 

我的.aspx:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" 
     OnRowDataBound="GridView1_RowDataBound" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" 
     AllowPaging="True" AllowSorting="True"> 
     <RowStyle CssClass="gridViewRowStyle" Wrap="True" /> 
     <HeaderStyle CssClass="gridViewHeaderStyle" Wrap="False" /> 
     <SelectedRowStyle Wrap="true" CssClass="gridViewSelectedRowStyle" /> 
     <AlternatingRowStyle CssClass="gridViewAltRowStyle" /> 
     <Columns> 
      <asp:BoundField DataField="Type_of_Animal" HeaderText="Type_of_Animal" /> 
      <asp:BoundField DataField="Sex" HeaderText="Sex" SortExpression="Sex" /> 
      <asp:BoundField DataField="Age" HeaderText="Age" SortExpression="Age" /> 
      <asp:BoundField DataField="Location" HeaderText="Location" /> 
     </Columns> 
     <FooterStyle CssClass="gridViewHeaderStyle" Wrap="False" /> 
     <PagerSettings Position="Bottom" /> 
     <PagerStyle CssClass="gridViewHeaderStyle" /> 
    </asp:GridView> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyConnectionString %>" 
     SelectCommand="SELECT [Type_of_Animal], [Sex], [Age], [Location]   From[AnimalDetails] "> 
    </asp:SqlDataSource> 
    <div style="font-family: Arial; font-size: small;"> 
     &nbsp;&nbsp;You are viewing page 
     <%=GridView1.PageIndex + 1%>of 
     <%=GridView1.PageCount%> 
    </div> 
    </asp:Panel> 
    <asp:Label ID="lblMsg" runat="server" Text="Your search criteria did not return any Logs" 
     Visible="False" CssClass="label"></asp:Label> 
    </td> </tr> </table> 
+0

你可能需要把它分成幾個單獨的問題。從數據庫中獲取圖像以顯示在網格中相當容易。 http://odetocode.com/articles/172.aspx – RThomas 2011-05-28 04:50:56

+0

@lazyDBA謝謝你。任何人都有其他的想法呢? – snayr 2011-05-28 11:05:08

+0

沒有人知道我哪裏會出錯? – snayr 2011-05-28 13:54:29

回答

0

在看到您的代碼後,我無法找到您將DataSet指定給SqlCommand command ResultSet的位置。

我的意思是DataSet ds = command.ExecuteDataSet();

之後,請檢查您的存儲過程是通過將其從SQL Server Management Studio中的相同的參數返回任何結果。

另外,您正在使用DataReader,但綁定了未定義的ds。