使用List填充ObjectListView

时间:2014-01-28 05:56:04

标签: c# datasource objectlistview

我正在尝试使用列表从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控件上。

我可能知道编码有什么问题吗?

1 个答案:

答案 0 :(得分:1)

您是否相应地设置了KeyAspectNameParentKeyAspectNameRootKeyValue

如果您是使用设计师进行的,RootKeyValue可能是您的问题:

  

由于IDE中Designer的限制,RootKeyValue只能通过IDE获得字符串值。如果您的ParentKey不是字符串类型,则必须通过代码设置其值。

由于您的父键属于int类型,因此使用

dataTreeListView1.RootKeyValue = 0;

请注意,与基本OLV相比,您无需手动添加列。如果要隐藏设置ShowKeyColumns = false的键列。

编辑: 您的代码中还有另一个错误。您添加对象oClass的相同实例3次。在初始化新人之前使用oClass = new Class();