http://www.csdn.net/Develop/article/20/20221.shtm

解决方案 »

  1.   

    在把DataSet指定为DataGrid的DataSource之前,建立一个新的数据行(DataRow),计算每列的合计值填到新行的相应列中。然后DataSet.DataTables[0].Rows.Add(新行),最后绑定到DataGrid的DataSource.
      

  2.   

    you need to insert DataRow into your DataSet and fill in data like int totals = (int) ds.Tables[0].Compute("SUM(Price)", "Product='Shoes'"); 
      

  3.   

    不会被上下滚动的?
    是說始終顯示出來,可以被用戶看到,而不需要拉滾動條嗎?
    呵呵,有什么意義呢?合計肯定是對當前所有datagrid里面行的統計了。
      

  4.   

    http://dazhou.xicp.net/datagrid.jpg
    看看我要的效果图吧
      

  5.   

    使用 Sql 语句实现应该 是 可以的 吧也就是 结果集 中 包含 此和
      

  6.   

    用两个控件来合并就可以实现了!上面一个表格用于数据更新及修改用!要设成左|上|右三边有框的表格!下面一个表格用于合计用!设成左|下|右三边有框的表格!把它的滚动条盖住上面一个表格的滚动条,作为列的滚动条!最后在滚动条\更改列宽的几个相关事件中,用循怀或TIME控件来让上下两个表格的每个列都一样宽!这样就可以了!
    这种方法应该是比较笨的一种方法,不过我几个程序里都是用这种方法来实现的!*^_^*
      

  7.   

    qifanghcy(QiFang) :能不能给我一些代码啊?
      

  8.   

    DevExpress的XtraGrid控件可以实现
      

  9.   

    方枪枪的答案:
    ----------------------------------------
    http://expert.csdn.net/Expert/topic/1694/1694828.xml?temp=.6631281
    -----------------------------------
    自己做一个user control,里面放上datagrid,两个scrollbar,一个label(存放合计),然后自己处理的。
    呵呵,但是后来我没有采用这种方式,因为对于我的程序,改动量有些太大了!这个问题就一直搁置了。
      

  10.   

    说实话,这不是什么答案。我这种方式和qifanghcy(QiFang)楼上说的一样。使用userobject比较别扭,我也没找到什么好的办法!帮楼主up一下!!!
      

  11.   

    DataGrid控件有很多不方便的地方,如果想方便一点的话,只有自己写一个控件了
      

  12.   

    这是一点思路:
    public DataGridEx()
    {
    this.Paint += new PaintEventHandler(PaintMe);
    this.Scroll += new EventHandler(ScrollMe);
    this.DataSourceChanged += new EventHandler(DataSourceChangedMe); this.VertScrollBar.Visible = false;
    this.VertScrollBar.VisibleChanged += new EventHandler(VScrollBarVisibleChangedMe); this.HorizScrollBar.Visible = false;
    this.HorizScrollBar.VisibleChanged += new EventHandler(HScrollBarVisibleChangedMe);
    }public void ScrollToRow(int row)
    {
    this.GridVScrolled(this,new ScrollEventArgs(ScrollEventType.SmallIncrement, row)); 
    }public void ScrollToColumn(int col)
    {
    int oldcol = this.FirstVisibleColumn;
    if(col > oldcol)
    {
    this.GridHScrolled(this,new ScrollEventArgs(ScrollEventType.SmallIncrement, col)); 
    }
    else
    {
    this.GridHScrolled(this,new ScrollEventArgs(ScrollEventType.SmallDecrement, col)); 
    }
    }希望对你有点用处。因为后来我在没弄,所以就放下了。
      

  13.   

    我发现DG中的控件是由一个水平滚动条,垂直滚动条以及若干DataGridColumnStyle组成的
    DG的VisibleRowCount和VisibleColumnCount用于表示当前可见的行列数,这两个数不知道是如何取得的??因为滚动条是不一定出现的啊!还有我重写DG控件后,自己把水平滚动条往上移,以为底部就会空出一截,结果并不是这样,而是滚动条好象浮在了DG上面一样!不知道谁有办法让DG底部空出一块面积,以便自己在上面画上一些东东!
      

  14.   

    把你绑定到datagrid.datasource的那个tatatable中加入一个datarow,把计算好的值放到row中,然后在重新绑定一次。
      

  15.   

    用DataView,设定一个排序字段,如 RecNo,Typeof(Int32), 将合计栏设置一个很大的值,你也可以用编程控制该栏是否显示,以及加入新行时如何填充值
      

  16.   


    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];              }
             }缺点: 把所有的数据都访问过 肯定效率不是很好还有其他的办法  如果有更好的方法  请告诉我 。
      

  17.   

    上面是向datagrid中加横向 纵向的合计 
    你看看
      

  18.   

    谢谢朋友们的关心! TO:qianli918(千里马)
    你的方法,不能满足我的要求啊!TO: liduke(天下有雪)
      怎么做呢?
      

  19.   

    dataGRID不是有页脚吗?可以利用它作合计行,不过填充的数据需要你写代码计算
    这个方法我在web窗体中试过,不知道windows窗体中可不可行,你试试吧
      

  20.   

    你说的是WEB的,WIN中的DataGrid相差很大的
      

  21.   

    组合Datagrid和其它控件,生成新的控件,底下有一块地方显示合计,感觉上不大好对齐,可能要动态调整下面的位置
      

  22.   

    最简单的方法是使用重叠方法,用Label放在DataGrid上面;好的方法你可以使用第三方控件,到http://www.componentone.com看看
      

  23.   

    windyyang(风萧萧):拦住了最后一行的时候怎么办??有个滚动问题!我在底下加了一块,并加大了垂直滚动条的最大滚动值,但有时却不能滚动动底??
    也就是说最后一条记录躲在我加上的控件底下,出不来了,有什么办法解决?