0

我有一个需要转换为 C# 类的 excel 表。这里的想法是,对于 excel 表中的每一行,我将创建一个类的实例,将 Product Id 和 Period id 作为构造函数中的参数传递。因此,对于该特定时期的每个产品,将创建一个实例。
这个类有几个属性。一个属性要求是,在其公式中,要调用另一个属性的 Total。

例如,我的工作表是这样的:

在此处输入图像描述

我需要在每个实例中获取生产百分比。

如果我的类名为 clsProduction,一旦创建了此类的实例,我如何填充其属性“ProductionPerc”?

任何想法都将受到高度赞赏。

我的代码在这里

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Data;
using System.Data.SqlClient;

namespace IMS
{
    public class clsProduction
    {

        public clsProduction() { }
        public clsProduction(clsCostOfCrudeMVG obj, int _PeriodId, int _ProductId)
        {
            _clsCostOfCrudeMVG = obj;
            PeriodId = _PeriodId;
            ProductId = _ProductId;
            GetQuantity();

        }


        public int ProductionPerc
        {
            get { return _ProductionPerc; }
            set { _ProductionPerc= value; }
        }

}
}
4

2 回答 2

1

你必须使用 2 个类,因为一个产品存在于细节之外,你应该这样做。

public class productionDetail 
{
  public string ProductName {get;set;}
  public int ProductionQuantity {get;set;}
  public double ProductionPercentage  {get;set;}

  public productionDetail(string productName, int productQuantity)
  {
    ProductName = productName;
    ProductionQuantity = productQuantity;
    ProductionPercentage = 0; // This will change later on
  }
}

public class Production
{
  public List<productionDetail> Details {get;set;}
  public int TotalProduction {get;set;}

  public production (List<productionDetail> myDetails)
  {
    Details = myDetails;
    RecalculatePercentage();
  }
  //Here the total will be calculated
  public void MakeTotal()
  {
    var totalProduction = 0;
    foreach(productionDetail d in Details )
    {
      totalProduction += d.ProductionQuantity;
    }
    TotalProduction = totalProduction;
  }
  public void RecalculatePercentage()
  {   
    MakeTotal();
    //Here you will update the detail records for the percentage.
    foreach(productionDetail d in Details )
    {
      d.ProductionPercentage = Convert.ToDouble(d.ProductionQuantity) / Convert.ToDouble(TotalProduction) * 100;
    }
  }
  public void AddDetail(productionDetail detail)
  {
    Details.Add(detail);
    RecalculatePercentage();
  }
}
于 2013-11-07T10:51:43.023 回答
1

你的类的每个实例只知道它自己。它不知道“人口”,因此无法计算该值代表的总体“人口”的百分比。

您需要一个类来实际进行这些计算(就像 Excel 的“应用程序”根据单元格的内容进行计算一样)。

尝试这个:

Class ProductionManager
{
  List<ProductionItem> _ProductionItems

  AddProductionItem(ProductionItem)
  {
    // Add the production items to _ProductionItems List

    // Now 
    // 1) enumerate the current collection of _ProductionItems
    // 2) keep running totals
    // 3) now re-enumerate the current collection of _ProductionItems
    //    updating each item with its respective percentage of the totals 
    //    you calculated in step 2.
    // and populate each ProductionItem with the respective percentages
  }
}
于 2013-11-07T10:17:47.463 回答