выбрать проверенные элементы списка проверенных на основе списка - PullRequest
0 голосов
/ 20 октября 2018

Я привязываю проверенный список со списком ролей, которые я получаю из базы данных, выполнив команду select all.У меня есть класс 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);
          }

Но это не работает, поскольку при проверке содержит ссылку на использование.И ссылки не совпадают лично. Роли и роли Clb.Items.

1 Ответ

0 голосов
/ 20 октября 2018

Прежде всего, я рекомендовал вам упомянуть ваш фреймворк (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 Item.

...