我正在尝试使用列表从ObjectListView库填充DataTreeListView。不幸的是我无法实现它,即使列表中有一个项目计数,也没有显示任何内容。
Class.cs
public class Class
{
protected string xName;
protected int xId;
protected int xParentId;
protected int happinessStatus;
protected int salaryStatus;
public Class()
{
this.xName = "";
this.xId = 0;
this.xParentId = 0;
this.happinessStatus = 0;
this.salaryStatus = 0;
}
public String Name
{
get { return this.xName; }
set { this.xName = value; }
}
public int Id
{
get { return this.xId; }
set { this.xId = value; }
}
public int ParentId
{
get { return this.xParentId; }
set { this.xParentId = value; }
}
public int HappinessStatus
{
get {return this.happinessStatus; }
set { this.happinessStatus = value; }
}
public int SalaryStatus
{
get { return this.salaryStatus; }
set { this.salaryStatus = value; }
}
public static List<Class> GetList()
{
List<Class> oList = new List<Class>();
Class oClass = new Class();
oClass.Name = "Person A";
oClass.Id = 1;
oClass.ParentId = 0;
oClass.HappinessStatus = 1;
oClass.SalaryStatus = 1000;
oList.Add(oClass);
oClass.Name = "Person B";
oClass.Id = 2;
oClass.ParentId = 1;
oClass.HappinessStatus = 1;
oClass.SalaryStatus = 2000;
oList.Add(oClass);
oClass.Name = "Person C";
oClass.Id = 3;
oClass.ParentId = 1;
oClass.HappinessStatus = 1;
oClass.SalaryStatus = 1000;
oList.Add(oClass);
return oList;
}
在MainForm的加载事件中,
我做了以下事情:
List<Class> list = new List<Class>();
list = Class.GetList();
dataTreeListView1.DataSource = list;
在设计器视图中,我还创建了一些列,这些列的方面名称设置为除Id和ParentId之外的类文件的每个属性。
KeyAspectName:Id ParentKeyAspectName:ParentId
我做了一个小消息框来显示列表中项目的计数,它是正确的,但没有显示在dataTreeListView控件上。
我可能知道编码有什么问题吗?
答案 0 :(得分:1)
您是否相应地设置了KeyAspectName
,ParentKeyAspectName
和RootKeyValue
?
如果您是使用设计师进行的,RootKeyValue
可能是您的问题:
由于IDE中Designer的限制,RootKeyValue只能通过IDE获得字符串值。如果您的ParentKey不是字符串类型,则必须通过代码设置其值。
由于您的父键属于int
类型,因此使用
dataTreeListView1.RootKeyValue = 0;
请注意,与基本OLV相比,您无需手动添加列。如果要隐藏设置ShowKeyColumns = false
的键列。
编辑:
您的代码中还有另一个错误。您添加对象oClass
的相同实例3次。在初始化新人之前使用oClass = new Class();
。