ObjectListView – TreeListView在树结构中展开不同的列表

我尝试在树结构中扩展多个列表。

假设我有以下课程。 我有类Product,其中包含一个包含子项的列表。 这是我的实际树形结构。

class Product { int prodID; string prodName; List prodChildren; List
articleList; //maybe further list... public int ProdID { get { return prodID;} set{prodID = value;} } public string ProdName { get { return prodName;} set {prodName = value;} } public Product(int id, string name) { ProdID = id; ProdName = name; prodChildren = new List(); articleList = new List
(); } //... //addProdChildren //... //addArticles } class SalesArticle { int articleNumber; string articleName; public int ArticleNumber { get { return articleNumber; } set { articleNumber = value; } } public string ArticleName { get { return articleName; } set { articleName = value; } } public SalesArticle(int no, string name) { ArticleNumber = no; ArticleName = name; } }

到目前为止,这部分工作得很好,但是如何在同一个树中扩展文章列表呢? 我不能让这部分工作。

应该看起来像:

 [product1] ---------[product2] ---------[product3] --------------[article1] --------------[article2] --------------[article3] --------------[article4] ---------[product4] --------------[product5] ----------------------[articleX] ----------------------[articleX] ----------------------[articleX] ----------------------[articleX] 

我的CanExpandGetter和ChildrenGetter目前非常基础

  tlvProduktStruktur.CanExpandGetter = delegate (object x) { return (x is Product); }; tlvProduktStruktur.ChildrenGetter = delegate (object x) { if (((Product)x).ProduktChildren.Count > 0) return ((Product)x).prodChildren; else return null; }; 

更新

—————————————

如果有人有兴趣,我找到了解决方案:

我的产品类有一个对象列表:

  class Product { int prodID; string prodName; List childItems; ... } 

现在我可以将每种类型的对象或其他列表添加到此对象列表中,例如:

  Product rootProduct = new Product(1, "root"); Article artikel1 = new Article(); Article artikel2 = new Article(); //this root product has a working process which contains a list of articles WorkingProcess wp = new WorkingProcess(); wp.add(artikel1); wp.add(artikel2); childItems.Add(wp); //let's assume the root product has also two children Product p1 = new Product(2, "sub product 1"); Product p2 = new Product(3, "sub product 2"); rootProduct.childItems.Add(p1); rootProduct.childItems.Add(p2); 

结构如下所示:

 rootProduct
 -  -  - 工作流程
 -  -  -  -  - -第1条
 -----------第二条
 ------ SubProduct1
 ------ SubProduct2

现在我们只需要更改CanExpandGetter和ChildrenGetter:

  // when the node can be expanded 

tlvProduktStruktur.CanExpandGetter = delegate(object x){

  //if the product has child items (working process and/or child products) show it as expandable if (x is Product) if (((Product)x).ChildItems.Count > 0) return true; //if the working process has articles, show it as expandable if (x is WorkingProcess) if (((WorkingProcess)x).ArticleList.Count > 0) return true; return false; }; tlvProduktStruktur.ChildrenGetter = delegate (object x) { //check the type and expand its children //show the child items (working process and/or child products) of the current product if (x is Product) if (((Product)x).ChildItems.Count > 0) { return ((Product)x).ChildItems; } //show the articles of the working process if (x is WorkingProcess) if (((WorkingProcess)x).ArticleList.Count > 0) return ((WorkingProcess)x).ArticleList; return new List(); }; 

现在你应该得到预期的结果。