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

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

没有合计2003-8-31608010.jpg" align=baseline border=0>

最终效果

如果实现??

 XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

protected System.web.UI.WebControls.DataGrid DataGrid1;

  ///

  /// 数据来源

  ///

  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

  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();

 

  }

  ///

  /// 每行合计

  ///

  private  void  GetRowAccount(DataRow AcountRow,int begincol,int endcol,int accountcol)

  {

  for(int i=begincol;i

  { 

  if(!AcountRow.IsNull(accountcol))

  {

  if ( !AcountRow.IsNull(i) )

    AcountRow[accountcol]= Convert.ToInt32(AcountRow[accountcol])+Convert.ToInt32(AcountRow[i]);   

  }

  else  AcountRow[accountcol]=AcountRow[i]; 

  }

  }

 

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

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10790690/viewspace-972318/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10790690/viewspace-972318/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值