我有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
的一个项目(最后一项)未选择之前的项目
[根据我的数据库值administrator
和aaa
应该检查,但现在只选择了aaa
答案 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;
}