2014-04-07 32 views
0

我从sql查询生成一个CheckBoxList,并且所有工作正常,即CheckBoxList是依赖的,因此,当我检查一个唯一的选项时,它会生成另一个CheckBoxList,它也可以正常工作。我想检查多个选项并获取所有数据,但查询仅在最后一个chekbox检查时运行。检查依赖复选框列表中的倍数选项C#

如何实现接受CheckBoxList中选中的所有选项并显示所有数据的查询?

这里我的代码:

protected void cblList1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    foreach (ListItem list1 in cblList1.Items) 
    { 
     if (list1 .Selected == true) 
     { 
      LoadCheckBoxListList2(list1); 
     } 
    } 
} 

private void LoadCheckBoxListList2(ListItem itemList1) 
{ 
    SqlCommand cmd = new SqlCommand("SELECT DISTINCT tbl_information.route AS ROUTE FROM tbl_information INNER JOIN tbl_regional ON tbl_information.region = tbl_regional.id_regional WHERE tbl_information.supervisor = " + "'" + itemList1 + "'", conn); 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    da.Fill(ds); 

    cblRutas.DataSource = ds; 
    cblRutas.DataValueField = "ROUTE"; 
    cblRutas.DataBind(); 
} 

回答

0

我得到了答案,这里是代码:

protected void cblList1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    List<string> list1 = new List<string>(); 
    foreach (ListItem itemList1 in cblList1.Items) 
    { 
     if (itemList1 .Selected == true) 
     { 
      list1.Add(itemList1.Text) 
     } 
    } 
    LoadCheckBoxListList2(list1); 
} 

private void LoadCheckBoxListList2(List<string> list1) 
{ 
    DataTable dt = new DataTable("R"); 
    dt.Columns.Add("Route", typeof(string)); 

     foreach (string li in list1) 
     { 
      string query = @"SELECT DISTINCT tbl_information.route AS ROUTE FROM tbl_information INNER JOIN tbl_regional ON tbl_information.region = tbl_regional.id_regional WHERE tbl_information.supervisor = '" + li + "'"; 

      SqlCommand cmd = new SqlCommand(query, conn); 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      DataSet ds = new DataSet(); 
      da.Fill(ds); 

      bool b = false; 

      foreach (DataRow item in ds.Tables[0].Rows) 
      { 
       if (!b) 
       { 
        dt.Rows.Add(item[0] + " (" + li + ")"); 
        b = true; 
        continue; 
       } 

       dt.Rows.Add(item.ItemArray); 
      } 
     } 

     cblRutas.DataSource = dt; 
     cblRutas.DataValueField = "ROUTE"; 
     cblRutas.DataBind(); 
    } 

感谢您aswers!

0
 for (int i = 0; i < checkedListBox1.Items.Count; i++) 
     { 
      if (checkedListBox1.GetItemChecked(i)) 
      { 
       string str = (string)checkedListBox1.Items[i]; 
       //Do your function call here 
      } 
     } 
0

如果我正确地得到了你的问题,你SelectedIndexChanged事件处理程序,你必须收集所有的检查项目列表(不仅是最后一个)和查询没有where [email protected]过滤器,但是where id in (@id1, @id2, etc)

所以,你只需要改变你的代码一点点:

protected void cblList1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    List<string> ids = new List<string>(); 
    foreach (ListItem list1 in cblList1.Items) 
    { 
     if (list1 .Selected == true) 
     { 
      ids.Add(list1.ToString());    
     } 
    } 

    LoadCheckBoxListList2(ids); 
} 

private void LoadCheckBoxListList2(List<string> ids) 
{ 
    string idsString = string.Join(", ", ids);// WARNING: carefull, SQL-injection is possible here, better to filter the input 
    SqlCommand cmd = new SqlCommand("SELECT DISTINCT tbl_information.route AS ROUTE FROM tbl_information INNER JOIN tbl_regional ON tbl_information.region = tbl_regional.id_regional WHERE tbl_information.supervisor IN (" + idsString + ")", conn); 

    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    da.Fill(ds); 

    cblRutas.DataSource = ds; 
    cblRutas.DataValueField = "ROUTE"; 
    cblRutas.DataBind(); 
} 
+0

谢谢aleksey.berezan。 查询时出现错误,因为当我运行该应用程序时,在“复选框的文本”附近出现语法错误。 – Gio11

+0

@ Gio11,你可以请你发布你的查询吗? –

相关问题