首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
tellmenow (22)
cutemouse (22)
softj (78)
iiprogram (69)
qdzx2008 (50)
goodboy1881 (14)
wangchinaking (58)
fancyhf (1)
harrymeng (41)
yjz0065 (113)
CSDN - 文档中心 - .NET 阅读:10450   评论: 18    参与评论
标题   向datagrid中加横向 纵向的合计 (在datatable中实现,datatable间倒数据)     选择自 dragonsuc 的 Blog
关键字   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];     

              }

         }

 

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

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

相关文章
对该文的评论
CSDN 网友 ( 2004-12-28)
如果数据多了,是不是就看不到最后的合计栏了?
如果是的话,直接在sql中用union all把合计加上就可以了呀,
CSDN 网友 ( 2004-09-06)
写sql语句可以实现!
guo0084 ( 2004-05-08)
如果某一列能排徐怎么办????
zwxrain ( 2004-04-05)
我要vb.net的....
dragon2002 ( 2003-08-17)
DataTable中的Compute函数

和DataColumn 的 Expression 可替代你写的东西

ms-help://MS.NETFrameworkSDK.CHS/cpref/html/frlrfsystemdatadatacolumnclassexpressiontopic.htm