我要做这样一个DataGrid
商品名 单价 数量 合计金额
Book1   10   20    ??
book2   100  10    ? ?单价和数量分别是数据库里的字段,合计金额是(Dataset里的临时变量)
单价和数量分别是DataGrid里的子控件(textbox),金额则是绑定列
现在我想在数量里随便输个数,我的合计金额就跟着发生变化

解决方案 »

  1.   

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

  2.   

    谢谢你,我的意思是有什么事件让datagrid中txtbox的内容发生变化时刷新datagrid
      

  3.   

    不用点按钮输入数量就改变的话就只有用JAVASCRIPT咯。
      

  4.   

    我想你txtbox的内容发生变化,你是不是想输入一下就改变呀???
    TEXTCHANGED事件行吗???不过最好就是敲一下回车,然后改变
      

  5.   

    你可以用一个控件来绑定合计金额如Label。然后数量改变后,用javascript来直接改变,控件的text属性,不知道行不行哟。
      

  6.   

    Protected Overloads Overrides Sub RaisePostBackEvent(ByVal sourceControl As System.Web.UI.IPostBackEventHandler, ByVal eventArgument As String)
            If eventArgument.Equals("enterchanged") Then
                Call chaged(EventArgs.Empty)
            End If
        End Sub    Private Sub chaged(ByVal e As EventArgs)    End Sub
      

  7.   

    Dim showOpen = "<script language=JavaScript>" _
                & "function change(){if (keycode=13) " _
                & Me.GetPostBackEventReference(Me, "AfterSentakuButtonClick") + ";}" _
                & "</script>"        If (Not Page.IsStartupScriptRegistered("OpenEmpForm")) Then
                Page.RegisterStartupScript("OpenEmpForm", showOpen)
            End If As String
      

  8.   

    textbox.Attributes.Add("onkeydown", "javascript:change();")
      

  9.   

    上面有个事件写错了
    Dim showOpen = "<script language=JavaScript>" _
                & "function change(){if (keycode=13) " _
                & Me.GetPostBackEventReference(Me, "enterchanged") + ";}" _/////////你的回车事件
                & "</script>"        If (Not Page.IsStartupScriptRegistered("OpenEmpForm")) Then
                Page.RegisterStartupScript("OpenEmpForm", showOpen)
            End If As String
      

  10.   

    thanks for rickjelly2004(rick & jelly) 
    不过我是想在datagrid中的子控件里做,不过datagrid中的textbox没有事件的,好像是这样
      

  11.   

    我也想实现这个效果,但不同的是使用下拉框,
    我一直也在想,DataGrid子控件要绑定数据源中数据应该用Web控件,但Web控件可以触发客户端时间么
    我想完成的当然不是想 rickjelly2004(rick & jelly)所描述
    如果像Asp那样完全用客户端才好呢,可是行么,我还不知道
    所以我认为解决这个问题的方法可能还要一段时间,不妨先用其它的方法替代(我也是这样)
    和 rickjelly2004(rick & jelly) 一样,有了好消息告诉我一下
      

  12.   

    目前看来好像只能用Javascript来实现了,看看还有没有高手指点一下
      

  13.   

    select 商品名,单价,数量,单价*数量 as 合计金额 from 表名然后将取得的结果填充即可。
      

  14.   

    关键还是有没有可以相应的事件,因为我们不能用javascript
      

  15.   

    问题以解决,我把数量这个datagrid的子控件的AutoPostBack设为true,然后我每次页面加载的时候都把这个值写dataset里,然后再刷新这个datagrid。OK!
    Thanks For All!
      

  16.   

    datagrid的子控件也就是数量这个txtbox