【问题标题】:Set checked items in checkedlistbox from list or dataset从列表或数据集中设置checkedlistbox中的选中项
【发布时间】:2012-10-23 16:40:43
【问题描述】:
我有一个 CheckedListBox,我想检查另一个列表中的所有项目。
此代码不起作用,因为 CheckedItems 属性是只读的并且类型不匹配,但它给出了我想要做的最好的想法。
checkedListBox1.DataSource = DataSetSelectAll().Tables[0];
checkedListBox1.ValueMember = "id_table";
checkedListBox1.DisplayMember = "name";
List<tableClass> list = MyCheckedList();
checkedListBox1.CheckedItems = list;
我知道这是错误的,但不知道如何更好地解释它。
【问题讨论】:
标签:
c#
winforms
dataset
checkedlistbox
checklistbox
【解决方案1】:
不可能像这样一次设置(检查)多个项目,checkedListBox1.CheckedItems = list;
你可以更好地使用 for 循环,例如:
List<tableClass> list = MyCheckedList();
for (int count = 0; count < checkedListBox1.Items.Count; count++)
{
if (list.Contains(checkedListBox1.Items[count].ToString()))
{
checkedListBox1.SetItemChecked(count, true);
}
}
【解决方案2】:
andy 的回答是对的,但我有一个更简单的解决方案。我的解决方案适用于 Windows 应用程序。
DataTable dt = MyCheckedList();
foreach (DataRow dr in dt.Rows)
{
for (int i = 0; i < checkedListBox1.Items.Count; i++)
{
if (dr["valueMember"].ToString() == ((DataRowView)checkedListBox1.Items[i])[0].ToString())
{
checkedListBox1.SetItemChecked(i, true);
}
}
}
注意:dt 必须填写一个包含所有checkedList 值的dataTable。
【解决方案3】:
我不知道为什么,但我 SetItemChecked(index, tf) 没有给我想要的东西。这就是我解决它的方法 - 明确设置 CheckedState。
for (int i = 0; i < myCheckedListBox.Items.Count; i++)
{
if (boolList[i])
{
myCheckedListBox.SetItemCheckState(i, CheckState.Checked);
} else
{
myCheckedListBox.SetItemCheckState(i, CheckState.Unchecked);
}
}