今天有需求要用到多次合计,根据网上的稍微改了一下,我想应该有更好的可惜没搜到,如果大家看到有更好的可以给我路径,我也好学习一下,谢谢
现在正式开始看看,其实显示的大致效果如下:
前台其实很简单
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server"> </asp:GridView> </div> </form> </body> </html>
后台只是绑定的时候做处理
int iOrderNum = 0;//订单每次数量 int OrderTotalNum = 0;//订单总数量 try { DataRow dataCurRow = null;//当前行 DataRow dataNewRow = null;//新增行 DataRow dataNextRow = null;//下一行 int rowCount = dt.Rows.Count; for (int i = 0; i < rowCount; i++) { dataCurRow = dt.Rows[i]; if ((i + 1) <(rowCount+1 ))//如果是最后一行就不用比较了 { if ((i + 1) == rowCount) { dataNewRow = dt.Rows[i]; iOrderNum += int.Parse(dt.Rows[i]["OrderNo"].ToString()); OrderTotalNum += int.Parse(dt.Rows[i]["OrderNo"].ToString()); dataNewRow = dt.NewRow(); dataNewRow["GroupNum"] = dataCurRow["GroupNum"]; dataNewRow["AgentId"] = "班组小计"; dataNewRow["OrderNo"] = iOrderNum; dt.Rows.InsertAt(dataNewRow, i + 1); } else { dataNextRow = dt.Rows[i + 1]; iOrderNum += int.Parse(dt.Rows[i]["OrderNo"].ToString()); OrderTotalNum += int.Parse(dt.Rows[i]["OrderNo"].ToString()); } } if (!dataCurRow["GroupNum"].Equals(dataNextRow["GroupNum"])) { if (dataCurRow["AgentId"].ToString() != "班组小计")//判断如果是小计则不用重复添加 { dataNewRow = dt.NewRow(); dataNewRow["GroupNum"] = dataCurRow["GroupNum"]; dataNewRow["AgentId"] = "班组小计"; dataNewRow["OrderNo"] = iOrderNum; rowCount += 1; dt.Rows.InsertAt(dataNewRow, i + 1); } else OrderTotalNum = OrderTotalNum - int.Parse(dt.Rows[i]["OrderNo"].ToString());//减去班组小计里面的重复数据 iOrderNum = 0; } } //插入最后一行合计 dataNewRow = dt.NewRow(); dataNewRow["AgentId"] = "班组总计"; dataNewRow["OrderNo"] = OrderTotalNum; dt.Rows.InsertAt(dataNewRow, dt.Rows.Count); rowCount = dt.Rows.Count; this.GridView1.DataSource = dt;//绑定数据库 this.GridView1.DataBind(); }
显示的效果如上图。