5

我有一个 CheckedListBox,我想检查另一个列表中的所有项目。此代码不起作用,因为 CheckedItems 属性是只读的并且类型不匹配,但它给出了我想要做的最好的想法。

    checkedListBox1.DataSource = DataSetSelectAll().Tables[0];
    checkedListBox1.ValueMember = "id_table";
    checkedListBox1.DisplayMember = "name";

    List<tableClass> list = MyCheckedList();
    checkedListBox1.CheckedItems = list;

我知道这是错误的,但不知道如何更好地解释它。

4

3 回答 3

11

像这样一次设置(检查)许多项目是不可能的,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);
  }
}
于 2012-11-03T07:01:25.417 回答
0

安迪的回答是对的,但我有一个更简单的解决方案。我的解决方案适用于 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必须填写一个包含所有已检查列表值的数据表。

于 2018-01-15T15:22:24.553 回答
0

我不知道为什么,但我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);
    }
}
于 2020-02-26T18:28:08.743 回答