今天有需求要用到多次合计,根据网上的稍微改了一下,我想应该有更好的可惜没搜到,如果大家看到有更好的可以给我路径,我也好学习一下,谢谢
现在正式开始看看,其实显示的大致效果如下:
前台其实很简单
<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();
}
显示的效果如上图。