ObjectlistView 复选框问题
ObjectlistView Checkbox Issue
我在尝试使用 ObjectListview
时遇到问题。
我的模型是这样的:
public class object
{
public string name {get; set;}
public int age {get; set;}
public bool inuse {get; set;}
}
并且我通过 Visual Studio 中的设计器向 Win Forms 应用程序添加了一个 FastObjectListView
。
然后,我添加了列并将每列的 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,更改了 ListView
的 CheckedAspectName
现在我可以看到复选框,但是如果我单击它们进行检查则没有任何反应.
我认为我完全走错了路,我该怎么做才能让它发挥作用?
非常感谢!!
我不知道如何使用 ObjectListView 来包含任何不属于您的模型的项目。
那么简单的方法就是更改您的模型以包含一个 "Delete" 属性 然后您可以在您的 ObjectListView 中显示它。
当然,这并不总是可能的!特别是如果您正在处理写入 to/from 数据库或另一个持久层的项目。
然后诀窍是写一个派生的class,你的模型是基础class,然后你只需向其中添加删除列。但是在 ObjectListView 中显示之前,您需要将您的 Base 转换为派生的 class。
以下代码可以提供帮助。
您保持您已经完成的列设置。
假设你的(现在的基地)class 是这样定义的
public class MyClass
{
public string name { get; set; }
public int age { get; set; }
public bool inuse { get; set; }
}
你派生的class继承自这个,添加删除属性和一个新的构造函数
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);
}
我在尝试使用 ObjectListview
时遇到问题。
我的模型是这样的:
public class object
{
public string name {get; set;}
public int age {get; set;}
public bool inuse {get; set;}
}
并且我通过 Visual Studio 中的设计器向 Win Forms 应用程序添加了一个 FastObjectListView
。
然后,我添加了列并将每列的 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,更改了 ListView
的 CheckedAspectName
现在我可以看到复选框,但是如果我单击它们进行检查则没有任何反应.
我认为我完全走错了路,我该怎么做才能让它发挥作用?
非常感谢!!
我不知道如何使用 ObjectListView 来包含任何不属于您的模型的项目。
那么简单的方法就是更改您的模型以包含一个 "Delete" 属性 然后您可以在您的 ObjectListView 中显示它。
当然,这并不总是可能的!特别是如果您正在处理写入 to/from 数据库或另一个持久层的项目。
然后诀窍是写一个派生的class,你的模型是基础class,然后你只需向其中添加删除列。但是在 ObjectListView 中显示之前,您需要将您的 Base 转换为派生的 class。
以下代码可以提供帮助。
您保持您已经完成的列设置。 假设你的(现在的基地)class 是这样定义的
public class MyClass
{
public string name { get; set; }
public int age { get; set; }
public bool inuse { get; set; }
}
你派生的class继承自这个,添加删除属性和一个新的构造函数
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);
}