【问题标题】:How to show sum of values of chid in parent c# dataTreeListView如何在父 c# 数据 TreeListView 中显示子值的总和
【发布时间】:2017-06-21 17:55:04
【问题描述】:

我可以知道如何在 c# dataTreeListView 中显示父级中子级的总和

我分享了一个屏幕截图

我想知道如何在人 A 中显示 5000,这是子表和父表的总和,任何人都可以帮助我

我想在 c# 对象列表视图上执行此操作

我做了什么来爬上树是

在表单加载时我写了这段代码

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");

class1.cs 文件有

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;
        }
    }
} 

请帮我做这件事

在问题的标签部分,我添加了 objectlistview,但我想显示关于 数据树列表视图

【问题讨论】:

  • 人 A 是人 A 的孩子,所以总和不应该是 4000 吗?
  • @johnny5 是的,很抱歉这个错误

标签: c# winforms objectlistview


【解决方案1】:

您可以使用 linq 按父级过滤,然后像这样对列表求和:

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

您可能需要切换返回类型,但我假设借方是小数

根据您的 cmets,您的代码需要更大的重构。您应该通过一种方法添加数据,并让该方法根据添加的子项更新父借方值。

但作为一种快速技巧,您可以只分配父值,但如果您要为多巢树执行此操作,则需要从最深的分支开始,然后逐步向上。

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

但实际上你应该重新设计你的程序

【讨论】:

  • 当我在 class1.cs 上尝试上述代码时,我得到一个错误 Error 1 Member 'bbcon_accout_software.Class1.GetList()' cannot be access with an instance reference;改为使用类型名称来限定它
  • @shahidkhan 很抱歉没有看到它是一个静态列表,删除这个 this 并使方法静态。我已经编辑了答案
  • @jhonny 5 感谢重播,错误消失了,但很抱歉,这不是我想要得到的,我的意思是在同一个 dataTreeListview 上得到总和。就像树顶上的 4000 个
  • @shahidkhan 你的架构搞砸了,你应该添加一个方法来添加你的类并在添加时更新值,或者一个事件等,但你现在可以这样做,如果这满足您的问题,请记得投票并标记为正确
  • 很高兴能帮上忙
猜你喜欢
  • 1970-01-01
  • 2013-11-03
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
  • 2015-06-14
  • 1970-01-01
相关资源
最近更新 更多