无法级联多个复选框项

时间:2014-01-07 10:15:50

标签: c# asp.net .net

我使用以下代码来级联我的复选框列表项。当我选择一个复选框级联工作时,当我选择多个复选框级联时,我的问题无效。逗号分隔值有问题吗?

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

2 个答案:

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