我使用以下代码来级联我的复选框列表项。当我选择一个复选框级联工作时,当我选择多个复选框级联时,我的问题无效。逗号分隔值有问题吗?
protected void cblGroup_SelectedIndexChanged(object sender, EventArgs e)
{
string selectedValues = string.Empty;
foreach (ListItem item in cblGroup.Items)
{
if (item.Selected)
selectedValues += item.Value + ",";
}
if (selectedValues != string.Empty)
selectedValues = selectedValues.Remove(selectedValues.Length - 1);
SqlConnection con = new SqlConnection(strcon);
con.Open();
SqlCommand cmd = new SqlCommand("select [Code] from Details where [Group] in ('" + selectedValues + "')", con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
con.Close();
cblCode.DataSource = ds;
cblCode.DataTextField = "Code";
cblCode.DataValueField = "Code";
cblCode.DataBind();
}
答案 0 :(得分:2)
您是否不需要使用SQL IN
关键字而不是=
- 因为您的查询正在使用逗号分隔值?
e.g。 SELECT * FROM TABLE WHERE [COL] IN ('1','2','3')
当只选择了1个项目时,where子句中不会有任何逗号,因此查询工作正常 - 当选择更多时,查询不返回任何结果。
选择单个项目时,使用IN
也会有效。
答案 1 :(得分:2)
您必须为所有selectedValues添加引号。试试这个:
selectedValues += "'" + item.Value + "',";
然后使用IN作为SpaceBison说。
protected void cblGroup_SelectedIndexChanged(object sender, EventArgs e)
{
string selectedValues = string.Empty;
foreach (ListItem item in cblGroup.Items)
{
if (item.Selected)
selectedValues += "'" + item.Value + "',";
}
if (selectedValues != string.Empty)
selectedValues = selectedValues.Remove(selectedValues.Length - 1);
SqlConnection con = new SqlConnection(strcon);
con.Open();
SqlCommand cmd = new SqlCommand("select [Code] from Details where [Group] in (" + selectedValues + ")", con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
con.Close();
cblCode.DataSource = ds;
cblCode.DataTextField = "Code";
cblCode.DataValueField = "Code";
cblCode.DataBind();
}