2017-06-21 1 views
1

kann ich weiß Summe des Wertes von chid zeigen, wie in C# dataTreeListViewWie in Mutter C# dataTreeListView

i ein Bildschirm enter image description here

ich weiß, will erschossen Summe des Kindes im Mutter zeigen geteilt, wie 5000 in Person A zu zeigen, welche Summe der untergeordneten Tabelle ist und die übergeordnete Tabelle kann mir bitte

helfen möchte ich dieses Objekt # Listenansicht auf c

, was ich oben Baum zu erhalten getan zu tun ist,

auf Formular Last ich diesen Code

List<Class1> list = new List<Class1>(); 
       list = Class1.GetList(); 
       this.dataTreeListView2.ParentKeyAspectName = "ParentId"; 
       this.dataTreeListView2.RootKeyValueString = "1"; 
       BrightIdeasSoftware.OLVColumn col = new BrightIdeasSoftware.OLVColumn(); 
       col.Width = 10; 
       dataTreeListView2.DataSource = list; 
       foreach (ColumnHeader column in this.dataTreeListView2.Columns) 
       { 
        column.Width = 100 + 100+ this.dataTreeListView2.SmallImageSize.Width; 
       } 
       this.dataTreeListView2.Columns.RemoveByKey("Id"); 
       this.dataTreeListView2.Columns.RemoveByKey("ParentId"); 

und

class1.cs Datei hat

namespace bbcon_accout_software 
{ 
    class Class1 
    { 
     /*public string Name { get; set;} 
     public Double Value { get; set; } 
     public List<Double> Children {get; set;}*/ 
     protected string xName; 
     protected string xId; 
     protected string xParentId; 
     protected decimal xcredit; 
     protected decimal xdebit; 
     public Class1() 
     { 
      //Name = name; 
      //Value = value; 
      //Children = new List<Double>(); 
      //Children.Add(2); 
      //Children.Add(3); 
      this.xName = ""; 
      this.xId = ""; 
      this.xParentId = ""; 
      this.xcredit = 0.0M; 
      this.xdebit = 0.0M; 
     } 
     public String Name1 
     { 
      get { return this.xName; } 
      set { this.xName = value; } 
     } 

     public String Id 
     { 
      get { return this.xId; } 
      set { this.xId = value; } 
     } 

     public String ParentId 
     { 
      get { return this.xParentId; } 
      set { this.xParentId = value; } 
     } 

     public Decimal Credit 
     { 
      get { return this.xcredit; } 
      set { this.xcredit = value; } 
     } 

     public Decimal Debit 
     { 
      get { return this.xdebit; } 
      set { this.xdebit = value; } 
     } 
     public static List<Class1> GetList() 
     { 
      List<Class1> oList = new List<Class1>(); 
      Class1 oClass4 = new Class1(); 
      oClass4.Name1 = "Person A"; 
      oClass4.Id = "xyz"; 
      oClass4.ParentId = "1"; 
      oClass4.Credit = 1; 
      oClass4.Debit = 1000; 
      oList.Add(oClass4); 
      Class1 oClass1 = new Class1(); 
      oClass1.Name1 = "Person B"; 
      oClass1.Id = "ldc"; 
      oClass1.ParentId = "xyz"; 
      oClass1.Credit = 1; 
      oClass1.Debit = 2000; 
      oList.Add(oClass1); 
      Class1 oClass2 = new Class1(); 
      oClass2.Name1 = "Person C"; 
      oClass2.Id = "ccc"; 
      oClass2.ParentId = "xyz"; 
      oClass2.Credit = 1; 
      oClass2.Debit = 1000; 
      oList.Add(oClass2); 
      Class1 oClass5 = new Class1(); 
      oClass5.Name1 = "Person A"; 
      oClass5.Id = "mno"; 
      oClass5.ParentId = "xyz"; 
      oClass5.Credit = 1; 
      oClass5.Debit = 1000; 
      oList.Add(oClass5); 
      return oList; 
     } 
    } 
} 

schrieb mir bitte helfen, diese in Frage

in Tag-Abschnitt zu tun i Objektliste hinzugefügt, aber ich möchte Details anzeigen dataTreeListview

+0

Person A erneut achitect ist ein Kind der Person A, so sollte nicht die Summe tatsächlich 4000 sein? –

+0

@ johnny5 ja Entschuldigung für den Fehler –

Antwort

1

Sie Linq von den Eltern filtern können und dann die Liste Summe wie folgt:

public static float SumChildren(string parentKey){ 
    return GetList().Where(x => x.ParentId == parentKey).Sum(x => x.Debit) 
} 

Sie können den Rückgabetyp wechseln, aber ich bin Debit Annahme ist eine Dezimalzahl

Based Bei Ihren Kommentaren benötigt Ihr Code einen größeren Refactor. Sie sollten die Daten über eine Methode hinzufügen und diese Methode den übergeordneten Belastungswert basierend auf den hinzugefügten Kindern aktualisieren.

Aber als ein schneller Hack können Sie einfach den übergeordneten Wert zuweisen, aber wenn Sie dies für Multi-Nest-Bäume tun werden, müssen Sie im tiefsten Zweig beginnen und arbeiten sich nach oben.

var parentDebitValue = SumChildren("xyz"); 
GetList().Where(x => x.Id == "xyz").First().Debit = parentDebitValue; 

Aber realisticly sollten Sie Ihr Programm

+0

wenn ich oben Code auf class1.cs versuchte ich bekomme einen Fehler Fehler Mitglied 'bbcon_accout_software.Class1.GetList()' kann nicht mit einer Instanz Referenz zugegriffen werden; qualifiziere es stattdessen mit einem Typnamen –

+0

@shahidkhan sorry habe nicht gesehen, dass es eine statische Liste war, entferne dies und mach die Methode statisch. Ich habe die Antwort bearbeitet –

+0

@jhonny 5 Danke für die Wiederholung und Fehler ist weg, aber Entschuldigung das ist nicht das, was ich möchte, dass ich meine, um die gleiche summe auf DataTreeListview zu bekommen. wie 4000 oben auf Baum –