检查从属复选框列表 C# 中的多个选项

本文关键字:选项 复选框 列表 检查 | 更新日期: 2023-09-27 17:57:06

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

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

这是我的代码:

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# 中的多个选项

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

正确回答了您的问题,则在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();
}

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

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

谢谢你的支持!!