专栏首页c#开发者向datagrid中加横向 纵向的合计 (在datatable中实现,datatable间倒数据)

向datagrid中加横向 纵向的合计 (在datatable中实现,datatable间倒数据)

如果实现??

protected System.Web.UI.WebControls.DataGrid DataGrid1; 
 /// <summary> 
 /// 数据来源 
 /// </summary> 
 DataSet CreateDataSource()  
 { 
 DataTable dt = new DataTable(); 
 DataRow dr; 
 dt.Columns.Add(new DataColumn("名称", typeof(string))); 
 dt.Columns.Add(new DataColumn("Value1", typeof(Int32))); 
 dt.Columns.Add(new DataColumn("Value2", typeof(Int32))); 
 dt.Columns.Add(new DataColumn("Value3", typeof(Int32))); 
 dt.Columns.Add(new DataColumn("Value4", typeof(Int32))); 
 for (int i = 0; i < 10; i++)  
 { 
 dr = dt.NewRow(); 
 dr[0] = i.ToString()+"名称"; 
 dr[1] = i; 
 dr[2] = i+1; 
 dr[3] = i+2; 
 dr[4] = i+3; 
 dt.Rows.Add(dr); 
 } 
  DataSet MyData=new DataSet(); 
 MyData.Tables.Add(dt); 
 return MyData; 
 } 
 private void Page_Load(object sender, System.EventArgs e) 
 { 
 // 在此处放置用户代码以初始化页面 
  DataSet MyData=CreateDataSource(); 
// DataGrid1.DataSource= MyData; 
// DataGrid1.DataBind(); 
 DataTable MyTable=new DataTable(); 
 DataColumn myColum;  
 foreach( DataColumn NowDataColumn in MyData.Tables[0].Columns) 
 { 
 myColum=new DataColumn(); 
 myColum.DataType=NowDataColumn.DataType; 
 myColum.ColumnName=NowDataColumn.ColumnName; 
 MyTable.Columns.Add(myColum); 
 } 
 myColum=new DataColumn(); 
 myColum.DataType=System.Type.GetType("System.Int32"); 
 myColum.ColumnName="每行合计"; 
 MyTable.Columns.Add(myColum); 
 DataRow AcountRow;  
 int DataColumns=MyData.Tables[0].Columns.Count; 
 foreach( DataRow NowRow in MyData.Tables[0].Rows) 
 { 
 AcountRow=MyTable.NewRow(); 
 AcountRow.ItemArray=NowRow.ItemArray; 
 //每行合计 
 GetRowAccount(AcountRow,1,5,DataColumns); 
 MyTable.Rows.Add(AcountRow); 
 } 
 //生成的合计 
 AcountRow=MyTable.NewRow(); 
 AcountRow[0]="竖列合计";  
 for(int count=1;count<MyTable.Columns.Count;count++) 
 foreach (DataRow NowRow in MyTable.Rows) 
 { 
 if(!AcountRow.IsNull(count)) 
 { 
 if (!AcountRow.IsNull(count) ) 
 AcountRow[count]= Convert.ToInt32(AcountRow[count])+Convert.ToInt32(NowRow[count]); 
 } 
 else AcountRow[count]=NowRow[count];; 
 } 
 MyTable.Rows.Add(AcountRow); 
 DataGrid1.DataSource=MyTable; 
 DataGrid1.DataBind(); 
 } 
 /// <summary> 
 /// 每行合计 
 /// </summary> 
 private void GetRowAccount(DataRow AcountRow,int begincol,int endcol,int accountcol) 
 { 
 for(int i=begincol;i<endcol;i++) 
 {  
 if(!AcountRow.IsNull(accountcol))  
 { 
 if ( !AcountRow.IsNull(i) ) 
  AcountRow[accountcol]= Convert.ToInt32(AcountRow[accountcol])+Convert.ToInt32(AcountRow[i]);   
 } 
 else AcountRow[accountcol]=AcountRow[i];  
 } 
 } 

缺点: 把所有的数据都访问过 肯定效率不是很好

还有其他的办法如果有更好的方法  请告诉我。

作者Blog:http://blog.csdn.net/dragonsuc/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [原创]PipelineTools 文件传输工具

    功能模块只有 1/文件目录-〉文件目录 2/文件目录-〉MSMQ 3/MSMQ-〉MSMQ 4/MSMQ -〉文件目录 在传输MSMQ是文件不能超过4M 下载文...

    阿新
  • 离写出大师级代码只差这一步

    离写出大师级代码只差这一步 大师级代码简单的说就是写得流畅,看的舒服,就像《海上钢琴师》影片里的1900弹奏钢琴一样。没看过的可以下着看一下非常经典。如果写代...

    阿新
  • 用selenium自动化验收测试

    用 Selenium 自动化验收测试 如何使用 Selenium 测试工具对 Ruby on Rails 和 Ajax 应用程序进行功能测试 文档选项 将此...

    阿新
  • 1.驱动程序概念介绍

    u-boot的任务是启动内核,内核的任务是启动应用程序 ,应用程序会涉及很多文件和硬件操作(当然不会直接操作硬件),比如读写文件,点灯、获取按键值。 比如对于控...

    张诺谦
  • Android Studio中的Gradle依赖深入讲解

    Android studio依赖项目是使用gradle管理的,依赖一个项目、一个jar包、一个工程,都可以在这里进行配置,本文将给大家详细介绍关于Android...

    砸漏
  • 梯度提升树(GBDT)原理小结

        在集成学习之Adaboost算法原理小结中,我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度...

    刘建平Pinard
  • 快速学习POI- POI报表的概述

    在企业级应用开发中,Excel报表是一种最常见的报表需求。Excel报表开发一般分为两种形式:

    cwl_java
  • Basemap系列教程:绘图

    (1) reduce_C_function 参数用于显示每一个 bin 的最大值,从而代替平均值

    bugsuse
  • 【一天一大 lee】划分字母区间 (难度:中等) - Day20201022

    字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。

    前端小书童
  • 详解CPU漏洞对机器学习的影响:几乎所有卷积层都受影响,QR分解降速37%

    作者 | Mikel Bober-Irizar 翻译 | 刘畅 编辑 | Donna (备注:KPTI 在计算机中指 Kernel page-table iso...

    AI科技大本营

扫码关注云+社区

领取腾讯云代金券