ObjectlistView Чекбокс Проблема - PullRequest
1 голос
/ 06 марта 2020

У меня проблема с попыткой заставить Checkbox работать с ObjectListview.

Моя модель выглядит следующим образом:

public class object
{   
    public string name {get; set;}
    public int age {get; set;}
    public bool inuse {get; set;}
}

И я добавил FastObjectListView через Designer в Visual Studio в приложение Win Forms. Затем я добавил столбцы и установил AspectName для каждого столбца в свойстве Models (Первый столбец: AspectName: имя, Второй столбец: AspectName: age, Третий столбец: AspectName: inuse).

Впоследствии, Я заполнил ListView этим:

using (var context = new objectDb())
{
    var objectlist = context.objects.ToList();
    fastoLV_Clean.SetObjects(objectlist);                             
    fastoLV_Clean.Refresh();
}       

Это работает, и я могу видеть свои записи в базе данных в ListView.

Теперь я хочу добавить столбец CheckBox, в котором кто-то может отмечать или снимать флажки, чтобы удалить их, и я не могу заставить этот флажок работать.

Я добавил столбец и установил для CheckBox значение true, изменил CheckedAspectName из ListView, и теперь я могу видеть флажки, но ничего не происходит, если я нажимаю на них, чтобы проверить. Я думаю, что я нахожусь на совершенно неверном пути, что мне нужно сделать, чтобы это заработало?

Большое спасибо !!

1 Ответ

0 голосов
/ 06 марта 2020

Я не знаю, как с ObjectListView включать любые элементы, которые не являются частью вашей модели.

Итак, простой способ состоит в том, чтобы изменить вашу модель, включив в нее свойство «Удалить», которое затем можно отобразить в вашем ObjectListView.

Конечно, это не всегда возможно! Особенно, если вы имеете дело с элементами, которые записываются в / из базы данных или другого персистентного слоя.

Тогда уловка заключается в том, чтобы написать производный класс с вашей моделью, являющейся базовым классом, а затем просто добавить столбец удаления в это. Но тогда вам нужно будет преобразовать из вашей Base в производный класс, прежде чем показывать в ObjectListView.

Следующий код может помочь с этим.

Вы сохраняете настройки ваших столбцов такими же, как у вас уже сделано. Предполагая, что ваш (теперь базовый) класс определен так:

 public class MyClass
 {   
     public string name { get; set; }
     public int age { get; set; }
     public bool inuse { get; set; }
 }

Ваш производный класс наследует от него, добавляет свойство delete и новый конструктор

public class MySecondClass : MyClass
{
    public bool Delete { get; set; }

    public MySecondClass(MyClass other)
    {
        //Copy from MyClass
        this.name = other.name;
        this.age = other.age;
        this.inuse = other.inuse;

        //Set default for new properties
        this.Delete = false;
    }
}

Ваш код для извлечения объектов и установите их тогда выглядит так

using (var context = new objectDb())
{
    var objectlist = context.objects.ToList();

    //Now we need to convert to the derived class type
     var secondlist = list.ConvertAll(x => new MySecondClass(x));

     //Then we setobjects using this new list
     fastoLV_Clean.SetObjects(secondlist);     
}
...