我有一张excel表需要转换成C#类。这里的想法是,对于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; }
}
}
}
答案 0 :(得分:1)
你班级的每个实例都只知道自己。它不知道“人口”,因此无法计算该值代表的总人口百分比。
您需要一个类来实际进行这些计算(就像Excel'Application'根据单元格的内容进行计算一样)。
试试这个:
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
}
}
答案 1 :(得分: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();
}
}