在DataTable里实现分类小计功能

核心代码:

 public void ProductSummarySubtotal(DataTable dt)
        {
            for (int i = dt.Rows.Count - 1; i > 0; i--)
            {
                //品牌小计
                if (i == dt.Rows.Count - 1 || dt.Rows[i]["品牌"].ToString() != dt.Rows[i + 1]["品牌"].ToString())
                {
                    string filter = " 品牌 NOT LIKE '%小计' and 品牌='" + dt.Rows[i]["品牌"].ToString() + "'";
                    DataRow dr = dt.NewRow();
                    dr["品牌"] = "品牌小计";
                    dr["品线"] = " ";
                    dr["品类"] = " ";
                    dr["品名"] = " ";
                    dr["GMV"] = dt.Compute("SUM(GMV)", filter);
                    //...........                   
                    dr["利润率"] = (decimal.Parse(dr["退货后收入"].ToString()) == 0) ? 0 : Math.Round(decimal.Parse(dr["利润"].ToString()) * 100 / decimal.Parse(dr["退货后收入"].ToString()), 2);
                    dt.Rows.InsertAt(dr, i + 1);//插入一行
                }
                //品线小计
                if (i == dt.Rows.Count - 1 || dt.Rows[i]["品线"].ToString() != dt.Rows[i + 1]["品线"].ToString())
                {
                    string filter = " 品牌 NOT LIKE '%小计' and 品牌='" + dt.Rows[i]["品牌"].ToString() + "' and 品线='" + dt.Rows[i]["品线"].ToString() + "'";
                    DataRow dr = dt.NewRow();
                    dr["品牌"] = "品线小计";
                    dr["品线"] = " ";
                    dr["品类"] = " ";
                    dr["品名"] = " ";
                    dr["GMV"] = dt.Compute("SUM(GMV)", filter);
                    //..............
                    dr["利润率"] = (decimal.Parse(dr["退货后收入"].ToString()) == 0) ? 0 : Math.Round(decimal.Parse(dr["利润"].ToString()) * 100 / decimal.Parse(dr["退货后收入"].ToString()), 2);                    
                    dt.Rows.InsertAt(dr, i + 1);//插入一行
                }
                //品类小计
                if (i == dt.Rows.Count - 1 || dt.Rows[i]["品类"].ToString() != dt.Rows[i + 1]["品类"].ToString())
                {
                    string filter = " 品牌 NOT LIKE '%小计' and 品牌='" + dt.Rows[i]["品牌"].ToString() + "' and 品线='" + dt.Rows[i]["品线"].ToString() + "' and 品类='" + dt.Rows[i]["品类"].ToString() + "'";
                    DataRow dr = dt.NewRow();
                    dr["品牌"] = "品类小计";
                    dr["品线"] = " ";
                    dr["品类"] = " ";
                    dr["品名"] = " ";
                    dr["GMV"] = dt.Compute("SUM(GMV)", filter);
                    //....................
                    dr["利润率"] = (decimal.Parse(dr["退货后收入"].ToString()) == 0) ? 0 : Math.Round(decimal.Parse(dr["利润"].ToString()) * 100 / decimal.Parse(dr["退货后收入"].ToString()), 2);                    
                    dt.Rows.InsertAt(dr, i + 1);//插入一行
                }
            }
        }

调用此方法:

DataTable dt = pro.ProductSummaryDate(startDate, Company, ShopID, Brand, ProductLine, ProductClass, ProductName);
ProductSummarySubtotal(dt);//小计
return dt;

html部分:

        $("#tbody").empty();
        $.getJSON("/Controller/action",
            {
                "startDate": startDate,
                "company": company.toString(),
                "shop": shop.toString(),
                "brand": brand.toString(),
                "line": line.toString(),
                "Class": Class.toString(),
                "ProductName": productName,
            },
            function (result) {
                $.each(result, function (i, field) {
                    var html = "";
                    if (field.品牌 == "合计") {
                        html += "<tr style='background-color:yellow;'>";
                    }
                    else {
                        html += "<tr>";
                    }
                    
                    if (field.品牌 == "品牌小计") {
                        html += "<td colspan='2'>" + field.品牌 + "</td>";
                        html += "<td></td>";
                        html += "<td>" + field.品名 + "</td>";
                    }
                    else if (field.品牌 == "品线小计") {
                        html += "<td></td>";
                        html += "<td colspan='2'>" + field.品牌 + "</td>";
                        html += "<td>" + field.品名 + "</td>";
                    }
                    else if (field.品牌 == "品类小计") {
                        html += "<td></td>";
                        html += "<td></td>";
                        html += "<td colspan='2'>" + field.品牌 + "</td>";
                        //html += "<td>" + field.品名 + "</td>";
                    }
                    else {
                        html += "<td>" + field.品牌 + "</td>";
                        html += "<td>" + field.品线 + "</td>";
                        html += "<td>" + field.品类 + "</td>";
                        html += "<td>" + field.品名 + "</td>";
                    }  
                    html += "<td>" + field.GMV + "</td>";
                    //...........................                    
                    html += "<td>" + ($.trim(field.利润率) == "" ? "0" : field.利润率) + "%</td>";
                    html += "</tr>";
                    //添加到table
                    $("#tbody").append(html);                 
                });          
            });

大概这个意思:

嗯嗯....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值