DataTable添加统计行及统计列实例

            DataSet ds = dbSys.ExecuteDataSet(QueryString()); 
            DataTable dt = ds.Tables[0];

            //添加统计行
            DataRow newRow = dt.NewRow();
            newRow[dt.Columns[1].ColumnName] = "Grand Total";
            
            double total = 0;
            string totalName = string.Empty;
            for (int i = 2; i < dt.Columns.Count; i++)
            {
                total = 0;  //换列统计时先清空
                Type type = dt.Columns[i].DataType;  //获取列数据的类型

                if (!string.IsNullOrEmpty(dt.Columns[i].ColumnName) && dt.Columns[i].DataType.Name == "String")
                {
                    for (int j = 0; j < dt.Rows.Count; j++)
                    {
                        if (!string.IsNullOrEmpty(dt.Rows[j][dt.Columns[i].ColumnName].ToString()))
                        {
                            total += Convert.ToDouble(dt.Rows[j][dt.Columns[i].ColumnName]);
                        }
                    }
                    totalName = ds.Tables[0].Columns[i].ColumnName;
                }
                newRow[totalName] = total;
            }
            dt.Rows.Add(newRow);

            //添加统计列
            total = 0;  //清空赋值
            totalName = string.Empty;  //清空赋值
            DataColumn col = dt.Columns.Add("Grand Total", typeof(string));

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                total = 0;
                for (int j = 2; j < dt.Columns.Count; j++)
                {
                    if (!string.IsNullOrEmpty(dt.Rows[i][dt.Columns[j].ColumnName].ToString()))
                    {
                        total += Convert.ToDouble(dt.Rows[i][dt.Columns[j].ColumnName]);
                    }
                }
                totalName = total.ToString();
                dt.Rows[i]["Grand Total"] = totalName;
            }
posted @ 2012-08-17 16:21  刀叨  阅读(647)  评论(0编辑  收藏  举报