0

データバインドチェックボックスリストをSQLServerに設定しました。これにより、データベースの[名前](例として映画を使用:コメディ、アクション、ホラー)列の項目が表示されます。チェックボックスリストはフィルターとして機能するため、ユーザーがチェックボックスをオンにすると、関連するムービーが表示されます。

チェックボックスリストをデータバインドすることができました。チェックボックスの値には、データベースの「CategoryId」にバインドされている値があります。しかし、チェックボックスがオンになっているときに映画のポスター(画像)のデータリストを表示するという、さらに先に進む方法がわかりません。

たとえば、「コメディ」チェックボックスをオンにすると、そのジャンルに属する映画のポスター(データリスト)が表示されます。

これまでに行ったコード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.. 

        }
    }
} 

任意の提案やアイデアは大歓迎です。

4

1 に答える 1

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. 電話DataList1.DataBind();

テストして、フィードバックをください。

よろしく

于 2012-07-10T16:37:43.570 に答える