【问题标题】:Dynamically Calculate & Add value in a DataTable Column - ASP.Net C#在 DataTable 列中动态计算和添加值 - ASP.Net C#
【发布时间】:2015-10-16 00:29:46
【问题描述】:

我有一个从 DB 绑定的 DataTable,列有:Id、Date、Credit、Debit。

我想添加新的“余额”列,其值应通过公式为每行计算; [上一行余额] - [贷方] + [借方]

我做过这样的事情:

dt; //Filled & having columns ID, Date, Debit, Credit
dt.Columns.Add("Balance");

foreach(DataRow row in dt.Rows)
{
    //What should I do here to apply above formula
}

【问题讨论】:

    标签: c# asp.net datatable


    【解决方案1】:

    我想您希望第一行的公式为 Credit + Debit,因为没有前一行,并调整您为任何其他行编写的公式。如果是这样,这将是安全的方法:

    for (int i = 0; i < dt.Rows.Count; i++)
    {
        DataRow row = dt.Rows[i];
    
        decimal credit = 0, debit = 0, previousBalance = 0;
        decimal.TryParse(row["Credit"].ToString(), out credit);
        decimal.TryParse(row["Debit"].ToString(), out debit);
    
        if (i > 0)
            decimal.TryParse(dt.Rows[i-1]["Balance"].ToString(), out previousBalance);
    
        row["Balance"] = i == 0 ? credit + debit : previousBalance - credit + debit;
    }
    

    【讨论】:

    • 非常感谢,它正在工作。而且我还想出了以下解决方案,它也有效。 for (int i = 0; i &lt; dt.Rows.Count; i++) { if(i==0) dt.Rows[i][5] = Convert.ToInt32(dt.Rows[i][4]) - Convert.ToInt32(dt.Rows[i][3]); else dt.Rows[i][5] = Convert.ToInt32(dt.Rows[i - 1][5]) + Convert.ToInt32(dt.Rows[i][4]) - Convert.ToInt32(dt.Rows[i][3]); }
    • @TalhaAhmed 好吧,可能有多种解决方案,我什至不知道您的信用卡、借方和余额是什么类型,所以小数是安全的选择,TryParse 可以避免从您的值获取值时出现任何错误DataTable,因为您也没有说这些列是否可以为空。您的示例可能有效,但不可读。在我看来,row["Balance"] 列比 row[5] 更直观,你不觉得吗?不管怎样,很高兴你解决了这个问题。如果我的回答有帮助,如果您接受它作为您的问题的解决方案,我将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2021-01-22
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多