2012-07-10 4 views
0

데이터베이스에 "이름"항목 (예 : 영화로 코미디, 액션, 공포)을 표시하는 SQL Server에 데이터 체크 박스 목록이 있습니다. 확인란 상자는 필터로 작동하므로 사용자가 확인란을 선택하면 관련 동영상이 표시됩니다.확인란을 선택하면 데이터 목록에 항목이 표시됩니다.

나는 체크 박스 목록에 데이터 바인딩을 관리해야했습니다. 확인란의 값은 데이터베이스의 "CategoryId"에 바인딩되는 값을가집니다. 그러나 체크 박스를 선택하면 영화 포스터 (이미지)의 데이터리스트를 표시하는 방법을 더 진행하는 방법에 대해서는 알지 못합니다.

예를 들어, "Comedy"체크 박스를 선택하면 해당 장르에 속하는 영화 포스터 (데이터리스트)가 나타납니다. 코드 뒤에

 <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.. 

     } 
    } 
} 

어떤 제안이나 아이디어가 크게 감사합니다 여기에

내가 default.aspx에, 지금까지 수행 한 코드입니다.

답변

1

을 테스트하지 않았으므로 어떤 피드백이 있으면 대답 해주십시오. 보자 :

  1. getReader() 방법 없애, 당신은의 SqlDataSource를 사용하는 당신이 한 모든 데이터가 필요하지 않습니다. 간단하게, CheckBoxList1_SelectedIndexChanged에서 Page_Load

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

  2. 에서이 작업을 수행 SELECT [ProductID], [Title], [Image1FileName] FROM [Product] WHERE CategoryId IN (여기)

  3. ID를 넣어 같은이 쿼리를 설정처럼, 모든 값을 확인 얻고 영화에 대한 쿼리에 그들을 연결하여 SqlDataSource1에 대한 명령

  4. 전화 DataList1.DataBind();

제발, 그것을 테스트하고 어떤 의견을 제공합니다.

감사합니다.

관련 문제