补充一下,就是有点象电子表格啦

解决方案 »

  1.   

    第一个问题有比较正宗的方法,第二个也许有,暂时没找到,我的做法是在绑定源的CurrentChange事件中处理。代码如下:private DataSet ds;
    private OleDbConnection oleDbConnection1;
    private DataGrid dataGrid1,dataGrid2;
    private void Form2_Load(object sender, System.EventArgs e)
    {
    try
    {
    OleDbDataAdapter daa=new OleDbDataAdapter("select num1,num2,num3 from num",oleDbConnection1);
    ds=new DataSet();
    daa.Fill(ds,"abc");
    DataColumn dc=new DataColumn();
    dc.ColumnName="sumcolumn";
    dc.DataType=typeof(Int32);
    dc.Expression="num1+num2+num3";
    ds.Tables[0].Columns.Add(dc);
    this.dataGrid1.DataSource=ds;
    this.dataGrid1.DataMember="abc";
    DataTable dt=ds.Tables[0].Clone();
    dt.TableName="sumabc";
    ds.Tables.Add(dt);
    DataRow dr=dt.NewRow();
    dr[0]=ds.Tables[0].Compute("Sum(num1)","");
    dr[1]=ds.Tables[0].Compute("Sum(num2)","");
    dr[2]=ds.Tables[0].Compute("Sum(num3)","");
    dr[3]=ds.Tables[0].Compute("Sum(exp)","");
    dt.Rows.Add(dr);
    dt.DefaultView.AllowEdit=true;
    dt.DefaultView.AllowNew=false;
    this.dataGrid2.DataSource=dt;
    this.dataGrid1.BindingContext[this.dataGrid1.DataSource,this.dataGrid1.DataMember].CurrentChanged+=new EventHandler(abc);
    }
    catch (Exception E)
    {
    MessageBox.Show(E.Message);
    }
    }
    private void abc(object sender,EventArgs e)
    {
    ds.Tables[1].Rows[0][0]=ds.Tables[0].Compute("Sum(num1)","");
    ds.Tables[1].Rows[0][1]=ds.Tables[0].Compute("Sum(num2)","");
    ds.Tables[1].Rows[0][2]=ds.Tables[0].Compute("Sum(num3)","");
    ds.Tables[1].Rows[0][3]=ds.Tables[0].Compute("Sum(exp)","");
    }