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。

相关问题