如何对动态生成的列中所有行的值求和?

How to sum the values of all rows in a column that has been dynamically generated?

早上好各位程序员,

我正在尝试对名为 SubTotal 的特定列的每一行中的所有值求和 SubTotal 需要从每一行的 LineTotal 求和,但这些行是动态生成的,并且是在按钮单击事件上生成的。我会在下面 link 我的代码和屏幕截图,也许你们中的一个可以帮助我:

编辑:- 我已经尝试了下面的所有 "Solutions" 但每次我尝试将其添加到我的页面时它使我的 PDF 没有页面,我也尝试过自己的研究,以无济于事,因为这些也使我的 pdf 没有页面

试过这些:-

(1)int sum = Convert.ToInt32(dt.Compute("SUM(Salary)", string.Empty));

(2)DataTable dt= dataSet.Tables["YourTableName"];
object lineTotalInputSum ;
lineTotalInputSum = dt.Compute("Sum("YourColumnName")", string.Empty);

(3)var subTotal= rows.Sum(row => row.Field<double>("LineTotal"));

我不是说你们中的任何一个人错了,我是说我不确定如何将这些建议实施到我的代码中并使其余部分正常工作,如果你能给我一个简单的解释,我会尽力而为要使其正常工作,请随时索取我未提供的任何其他代码

------结束编辑--------

foreach (DataRow dataRow in dt.Rows)
{                     
    //Adding dt.Rows to Strings for Use in iTextSharp
    string lineNumberInput = dataRow[1].ToString();
    string itemCodeInput = dataRow[12].ToString();
    string itemNameInput = dataRow[13].ToString();
    string QtyInput = dataRow[14].ToString();
    string UnitPriceInput = dataRow[15].ToString();
    //string Discount = dt.Rows[0][""].ToString();
    string lineTotalInput = dataRow[16].ToString();
    string wasReturnedInput = dataRow[17].ToString();

    //Implementing strings in iTextSharp
    var Cell_LineNumberList = new PdfPCell(new 
    Phrase(lineNumberInput, tablefont));
    var Cell_ItemCodelist = new PdfPCell(new 
    Phrase(itemCodeInput, tablefont));
    var Cell_ItemNamelist = new PdfPCell(new 
    Phrase(itemNameInput, tablefont));
    var Cell_Qtylist = new PdfPCell(new Phrase(QtyInput, 
    tablefont));
    var Cell_UnitPricelist = new PdfPCell(new 
    Phrase(UnitPriceInput, tablefont));
    var Cell_Discountlist = new PdfPCell(new 
    Phrase("None", tablefont));
    var Cell_LineTotallist = new PdfPCell(new 
    Phrase(lineTotalInput, tablefont));
    var Cell_WasReturnedlist = new PdfPCell(new 
    Phrase(wasReturnedInput, tablefont));

    //Aligning all the cells
    Cell_LineNumberList.HorizontalAlignment = 
    Element.ALIGN_CENTER;
    Cell_ItemCodelist.HorizontalAlignment = 
    Element.ALIGN_CENTER;
    Cell_ItemNamelist.HorizontalAlignment = 
    Element.ALIGN_CENTER;
    Cell_Qtylist.HorizontalAlignment = 
    Element.ALIGN_CENTER;
    Cell_UnitPricelist.HorizontalAlignment = 
    Element.ALIGN_CENTER;
    Cell_Discountlist.HorizontalAlignment = 
    Element.ALIGN_CENTER;
    Cell_LineTotallist.HorizontalAlignment = 
    Element.ALIGN_CENTER;
    Cell_WasReturnedlist.HorizontalAlignment = 
    Element.ALIGN_CENTER;


    //adding the cells to the table
    t.AddCell(Cell_LineNumberList);
    t.AddCell(Cell_ItemCodelist);
    t.AddCell(Cell_ItemNamelist);
    t.AddCell(Cell_Qtylist);
    t.AddCell(Cell_UnitPricelist);
    t.AddCell(Cell_Discountlist);
    t.AddCell(Cell_LineTotallist);
    t.AddCell(Cell_WasReturnedlist);
}

下面是我想求和的红色列和绿色值(值的来源)列的屏幕截图 * 这些都是动态生成的*

如果你能告诉我如何将它存储在 var 中,那么我可以从那里获取它 提前谢谢你。

尝试在 foreach 循环外的 "Line Total" 列上使用 LINQ,如下所示

var subTotal= rows.Sum(row => row.Field<double>("LineTotal"));

或者当你逐行处理时,使用一个老式的方法,即拥有一个变量并将行值添加到它。

希望对您有所帮助!

我不太确定您的 DataTable 是什么样子,但您使用 Compute 方法获取所需列的总和:

DataTable dt= dataSet.Tables["YourTableName"];
object lineTotalInputSum ;
lineTotalInputSum = dt.Compute("Sum("YourColumnName")", string.Empty);