【问题标题】:ObjectlistView Checkbox IssueObjectlistView 复选框问题
【发布时间】:2020-03-06 06:56:12
【问题描述】:

我在尝试使用 ObjectListview 时遇到问题。

我的模型如下所示:

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

我通过 Visual Studio 中的设计器将FastObjectListView 添加到 Win Forms 应用程序。 然后,我添加了列并将每列的AspectName 设置为模型属性(第一列:AspectName:名称,第二列:AspectName:年龄,第三列:AspectName:inuse)。

之后,我在ListView 中填写了这个:

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

这行得通,我可以在ListView 中看到我的数据库条目。

现在我想添加一个 CheckBox 列,有人可以在其中选中或取消选中项目以删除它们,但我无法使该复选框起作用。

我添加了一个列并将CheckBox 设置为true,更改了ListViewCheckedAspectName,现在我可以看到复选框,但如果我单击它们进行检查,则没有任何反应。 我想我完全走错了路,我该怎么做才能让它发挥作用?

非常感谢!!

【问题讨论】:

    标签: c# listview checkbox checkboxlist objectlistview


    【解决方案1】:

    我不知道如何使用 ObjectListView 包含任何不属于您的模型的项目。

    那么简单的方法是更改​​模型以包含“删除”属性,然后您可以在 ObjectListView 中显示该属性。

    当然,这并不总是可能的!特别是如果您正在处理写入数据库或其他持久层的项目。

    然后诀窍是编写一个派生类,您的模型是基类,然后您只需将删除列添加到此。但是,您需要先将 Base 转换为派生类,然后才能显示在 ObjectListView 中。

    下面的代码可以帮助解决这个问题。

    您保持已完成的列设置。 假设你的(现在是基类)类是这样定义的

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

    你的派生类继承自 this,添加了 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);     
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      相关资源
      最近更新 更多