检查从属复选框列表 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();
}
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();
}
谢谢你的支持!!