Самый простой способ - объединить оба метода в один большой метод:
После этого у вас возникает проблема, заключающаяся в том, что метод стал слишком большим и его нелегко поддерживать. Таким образом, вы должны рефакторинг этого метода снова.
Теперь вы должны изменить этот метод, чтобы уважать твердые принципы. https://medium.com/@mirzafarrukh13/solid-design-principles-c-de157c500425
На первом шаге вы должны создать новый объект, который представляет одну строку вашей таблицы данных. После этого вы должны создать новый метод для загрузки данных из таблицы данных в список этого объекта.
public class TbCost {
public decimal Conton {get;set;}
public decimal ProPri {get;set;}
public decimal ConPri {get;set;}
public decimal GetPriceCarpiTonage() {
return Conton * ProPri;
}
public decimal GetFreightBoluContainerTonnage() {
return ConPri / Conton;
}
}
public void CalculateCost()//this function getting called at a button onclick
{
try
{
decimal totalTonage = 0m;
decimal totalPrice = 0m;
decimal priceCarpiTonage = 0m;
decimal totalFreight = 0m;
IList<TbCost> tbCosts = ReadTbCosts(TB_COST.Data.Rows);
foreach (TbCost tbCost in tbCosts)
{
totalTonage += tbCost.Conton;
totalPrice += tbCost.ProPri;
priceCarpiTonage += tbCost.GetPriceCarpiTonage();
totalFreight += tbCost.GetFreightBoluContainerTonnage();
}
T_PROP.Text = Round(priceCarpiTonage/totalTonage);
T_TOTN.Text = totalTonage.ToString();
T_FREG.Text = Round(totalFreight);
}
catch(Exception ex)
{
ShowMessageBox(ex.ToString());
}
}
// This method should be moved to a sperate class
private string Round(decimal decimalValue) {
return (Math.Round(decimalValue, 2, MidpointRounding.AwayFromZero)).ToString();
}