【问题标题】:select checkedlistbox items checked based on list选择根据列表检查的已选中列表框项目
【发布时间】:2018-10-20 10:58:33
【问题描述】:

我将选中的列表框与我通过执行全选从数据库中获取的角色列表绑定。 我有具有角色列表属性的类 Person。 我通过在数据库上按人员 ID 执行选择角色来设置属性。 例如,我的 Person 有 3 个角色,而我的选中列表框有所有角色。 现在,我想编辑 Person 并且我希望在触发编辑表单上的加载事件时检查他的角色。所以:

          //checked list box is filled with List and converted to ListBox
          ((ListBox)rolesClbx).DataSource = BLPersons.SelectRoles();
          ((ListBox)rolesClbx).DisplayMember = "Name";

          //clear only selected (selected and checked are not the same)
          rolesClbx.ClearSelected();

          //person gets 3 roles
          person.Roles = BLPersons.SelectRolesByPersonId(person.PersonID);


          for (int i = 0; i < rolesClbx.Items.Count; i++)
          {
             if (person.Roles.Contains(rolesClbx.Items[i]))
                   rolesClbx.SetItemCheckState(i, CheckState.Checked);
          }

但这不起作用,因为检查时包含使用引用。而且person.Roles和rolesClb.Items中的引用也不一样。

【问题讨论】:

  • 有人可以帮忙吗?
  • 你能把你上面句子的所有相关代码都加进去吗?

标签: c# checkedlistbox


【解决方案1】:

首先我建议您提及您的框架(winform/wpf/asp.net/ ...)。 然后上面的每个框架,你应该使用id 来比较每个角色。我根据win-form 创建了一个与您的代码类似的示例代码,请检查它,如果您还有问题,请告诉我。

public class RoleItem
{
    public int Id { get; set; }
    public string Title { get; set; }

    public override string ToString()
    {
        return Title.ToString();
    }
}   

private void Page_Load(object sender, EventArgs e)
{
    List<RoleItem> _allRoles = new List<RoleItem>()
    {
        new RoleItem() {Id =1,Title="Role1"},
        new RoleItem() {Id =2,Title="Role2"},
        new RoleItem() {Id =3,Title="Role3"},
        new RoleItem() {Id =4,Title="Role4"},
    };

    List<RoleItem> _userRoles = new List<RoleItem>()
    {
        new RoleItem() {Id =1,Title="Role1"},
        new RoleItem() {Id =4,Title="Role4"},
    };


    rolesClbx.DataSource = _allRoles;

    for(int i=0;i< _allRoles.Count; i++)
    {
        if(_userRoles.Any(r => r.Id == _allRoles[i].Id))
        {
            rolesClbx.SetItemChecked(i, CheckState.Checked);
        }
    }
}

实际上,我创建了两个列表,第一个是所有角色,第二个是分配给用户的角色。根据每个roleId我检查CheckListBox项目。

【讨论】:

  • 谢谢你的朋友!它正在工作,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多