【问题标题】:Check multiples options in dependent checkboxlist C#检查依赖复选框列表C#中的多个选项
【发布时间】:2014-04-07 17:21:56
【问题描述】:

我正在从 sql 查询生成一个 CheckBoxList 并且一切正常,该 CheckBoxList 是依赖的,因此,当我只选中一个选项时,它会生成另一个 CheckBoxList 并且它也可以正常工作。我想检查多个选项并获取所有数据,但查询仅在检查最后一个复选框的情况下运行。

如何实现接受 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();
}

【问题讨论】:

    标签: c# sql checkboxlist


    【解决方案1】:
          for (int i = 0; i < checkedListBox1.Items.Count; i++)
            {
                if (checkedListBox1.GetItemChecked(i))
                {
                    string str = (string)checkedListBox1.Items[i];
                    //Do your function call here
                }
            }
    

    【讨论】:

      【解决方案2】:

      如果我的问题正确,在您的SelectedIndexChanged 事件处理程序中,您必须收集所有已检查项目的列表(不仅是最后一项)并查询没有where id=@id 过滤但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();
      }
      

      【讨论】:

      • 感谢 aleksey.berezan。查询出现错误,因为当我运行应用程序时,在“复选框的文本”附近出现语法错误。
      • @Gio11,你能发布你得到的查询吗?
      【解决方案3】:

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

      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();
          }
      

      感谢您的回答!!!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多