如何根据DataTable值检查取消选中CheckBoxList中的多个项目

时间:2015-11-16 08:30:43

标签: c# asp.net

我有CheckBoxList我想根据数据库值检查多个项目 这是我的代码

String TargetQuery = "Select RoleID from t_Et_Role_Staff_Combination where  EmployeeID='" + EmployeeID + "'";    
SqlDataAdapter adapt = new SqlDataAdapter(TargetQuery, DBcon.con);        
DataTable dtcheck = new DataTable();
adapt.Fill(dtcheck);

protected void Page_Load(object sender, EventArgs e)
{    
    for (int i = 0; i < dtcheck.Rows.Count; i++)
    {    
        CheckBoxList1.SelectedValue = dtcheck.Rows[i][0].ToString();        
    }
}

但是这只检查了来自DataTable的一个项目(最后一项)未选择之前的项目

[根据我的数据库值administratoraaa应该检查,但现在只选择了aaa

enter image description here

1 个答案:

答案 0 :(得分:1)

您需要在不在数据表中的Checkboklist项内迭代。

if (dtcheck != null && dtcheck.Rows.Count > 0) /* Prevents from null reference exception */
{   
    for (int i = 0; i < CheckBoxList1.Items.Count; i++)
    {
        if ( i < dtcheck.Rows.Count) /* Ensure and prevents from Index out of range exception */
        {
            bool flag = default(bool);
            Boolean.TryParse(dtcheck.Rows[i][0].ToString(), out flag);
            CheckBoxList1.Items[i].Selected = flag;
        }
    }
}

由于您已经更新了帖子和其他详细信息,因此上述代码在这种情况下无法使用。如上所述,您的数据库值为管理员,但您的复选框列表文本管理员两者都不同,您需要的内容与文本匹配并忽略大小写。

for (int i = 0; i < dtcheck.Rows.Count; i++)
{    
    string compareText = dtcheck.Rows[i][0].ToString();
    var vCheckBoxItem = CheckBoxList1.Items.Cast<ListItem>()
                        .FirstOrDefault(x => x.Text.Equals(compareText, StringComparison.CurrentCultureIgnoreCase));
    if (vCheckBoxItem != null)
        vCheckBoxItem.Selected = true;      
}