选中复选框列表后,在datalist中显示项目

时间:2012-07-10 16:13:42

标签: c# asp.net

我有一个数据绑定复选框列表到SQL Server,它显示我的数据库中“名称”(使用电影作为示例:喜剧,动作,恐怖)列中的项目。复选框列表充当过滤器,以便当用户选中复选框时,将显示相关的电影。

我设法对复选框列表进行了数据绑定。复选框的值具有绑定到数据库的“CategoryId”的值。但我不知道如何进一步前进,即在选中复选框时显示电影海报(图像)的数据表。

例如,当我选中“喜剧”复选框时,会出现属于该类型的电影海报(datalist)。

这是我到目前为止所做的代码,default.aspx:

       <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:DVDShopConnectionString %>" 
            SelectCommand="SELECT [ProductID], [Title], [Image1FileName] FROM [Product]"></asp:SqlDataSource>


        <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
            ConnectionString="<%$ ConnectionStrings:DVDShopConnectionString %>" 
            SelectCommand="SELECT * FROM [Category]"></asp:SqlDataSource>
        <br />


        <asp:CheckBoxList ID="CheckBoxList1" runat="server" AutoPostBack="True" 
            DataSourceID="SqlDataSource2" DataTextField="Name" DataValueField="CategoryID" 
            onselectedindexchanged="CheckBoxList1_SelectedIndexChanged">
        </asp:CheckBoxList>



<asp:datalist runat="server" DataKeyField="ProductID" DataSourceID="SqlDataSource1" 
            RepeatColumns="4" ID="DataList1" >
    <ItemTemplate>


        <asp:Image ID="Image1" runat="server" 
         ImageUrl='<%# Eval("Image1FileName", "~/ProductImages/{0}") %>'  />
         <br /> 

        <asp:Label ID="TitleLabel" runat="server" Text='<%# Eval("Title") %>' />
        <br />


        <br />
<br />
    </ItemTemplate>
        </asp:datalist> 

代码背后:

private SqlDataReader getReader()
{
    //get connection string from web.config
    string strConnectionString = ConfigurationManager.ConnectionStrings["DVDShopConnectionString"].ConnectionString;
    SqlConnection myConnect = new SqlConnection(strConnectionString);

    string strCommandText = "SELECT CategoryID, Name  from Category";

    SqlCommand cmd = new SqlCommand(strCommandText, myConnect);
    myConnect.Open();

     //DataList1.DataSource = reader; 
     DataList1.DataBind();
    // CommandBehavior.CloseConnection will automatically close connection
    SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    return reader;
}




protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{


    for (int i = 0; i < CheckBoxList1.Items.Count; i++)
    {
        if (CheckBoxList1.Items[i].Selected == true)
        {
            //items should be filter here.. 

        }
    }
} 

非常感谢任何建议或想法。

1 个答案:

答案 0 :(得分:1)

我会建议我没有测试的答案,所以请给我任何反馈。 我们来看看:

  1. 摆脱getReader()方法,只要您使用的是SqlDataSource,就不需要所有数据。只需在Page_Load

    执行此操作即可

    if(!this.IsPostBack) { this.CheckBoxList1.DataBind(); }

  2. CheckBoxList1_SelectedIndexChanged,获取所有选中的值,并在查看电影时将其连接起来,例如SELECT [ProductID], [Title], [Image1FileName] FROM [Product] WHERE CategoryId IN ( 将ID放在此处 )

  3. 将此查询设置为SqlDataSource1

  4. 的命令
  5. 致电DataList1.DataBind();

  6. 请测试并给我任何反馈。

    此致