尝试过写autopostback,结果因为模版列的textbox的id是变的,没办法进行统计.想问下有其他方法解决吗?谢谢

解决方案 »

  1.   

    比如说这样的网格
    AAAAA|BBBBB|CCCCC
        0| 1000|  100
        1|  100|  
        2|   10|   10最后的CCCCC就是一个模版列,是textbox,为了要编辑数据而出来的,我这里的设计是可以批量修改数据,但现在就想对CCCCC这列的数据进行动态统计,就是输入数后,在行尾把输入数据的总和显示出来.如果用按钮来提交的话当然是可以的,但想用autopostback来进行计算,就不知道应该怎么做了.谢谢
      

  2.   

    可以试一下遍历那一列的单元格 怎么样?float  count=0;
    for(int i=0;i<e.Item.Cells.Count-1;i++)
     {  
          count=count+e.Item.Cells[i].text;
     }
      

  3.   

    function DoCal()
    {
     var e = event.srcElement;
     var row = e.parentNode.parentNode;
     var txts = row.all.tags("INPUT");
     if (!txts.length || txts.length< 3)
      return; var q = txts[txts.length-3].value;
     var p = txts[txts.length-2].value; if (isNaN(q) || isNaN(p))
      return; q = parseInt(q);
     p = parseFloat(p); txts[txts.length-1].value = (q * p).toFixed(2);
     d=document.getElementById("DataGrid1")
    var count = 0
    var count1 = 0
    for(i=1;i<d.rows.length-1;i++)
    {
    count+=parseInt(d.rows[i].cells[7].all.tags("INPUT")[0].value) //数量列求和
        count1+=parseInt(d.rows[i].cells[9].all.tags("INPUT")[0].value) //金额列求和
    }d.rows[d.rows.length-1].cells[7].innerText=count
    d.rows[d.rows.length-1].cells[9].innerText=count1
    }
      

  4.   

    看了思归的,写的:)<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebApplication2.WebForm1" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <TITLE>WebForm1</TITLE>
    <META content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
    <META content="C#" name="CODE_LANGUAGE">
    <META content="JavaScript" name="vs_defaultClientScript">
    <META content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    <SCRIPT language="javascript">
    function Sum()
    {
    var d=document.getElementById("DataGrid1")
    var count = 0
    var aValue;
    for(i=1;i<d.rows.length-1;i++)
    {
    aValue=d.rows[i].cells[0].all.tags("INPUT")[0].value
    if(/[^\d+(\.\d*)?$]/g.test(aValue)) 
    {
    alert("Error!");
    return;
    }
    count+=parseInt(d.rows[i].cells[0].all.tags("INPUT")[0].value)
    }
    d.rows[d.rows.length-1].cells[0].all.tags("INPUT")[0].value=count
    }
    </SCRIPT>
    </HEAD>
    <BODY>
    <FORM id="Form1" method="post" runat="server">
    <ASP:DATAGRID id="DataGrid1" runat="server" autogeneratecolumns="False">
    <COLUMNS>
    <ASP:TEMPLATECOLUMN headertext="数量">
    <ITEMTEMPLATE>
    <INPUT ID="Text1" TYPE="text" VALUE='<%# DataBinder.Eval(Container.DataItem, "num") %>' NAME="Text1" RUNAT="server" onkeyup="Sum()">
    </ITEMTEMPLATE>
    </ASP:TEMPLATECOLUMN>
    <ASP:BOUNDCOLUMN headertext="名称" datafield="NAME"></ASP:BOUNDCOLUMN>
    </COLUMNS>
    </ASP:DATAGRID>
    </FORM>
    </BODY>
    </HTML>
      

  5.   

    谢谢楼上两位,代码能用,顺便补一个问题.用上面的例子,如果我想用BBBBB列的数字减去CCCCC(就是INPUT)列的数值,JAVASCRIPT里应该怎么取BBBBB行的值呢?谢谢,我自己试写了几个都失败,找帮助文件里也没找到办法.
      

  6.   

    转贴在ASP.NET中經常會遇到多筆錄入的情況,而且是在ItemTemplate下(許多User都不願編輯一筆存一筆),經過多次的嘗試,近日總算找到了思歸的一小段代碼,解決了我多日來的難題
    我有一個頁面但由於筆數不確定,所以只能採用DataGrid來實現,而且還是在ItemTemplate中,當點選客戶下拉選單時要將客戶代號SHOW在旁邊的textbox中,昨天找到一客戶端的參考,今日嘗試改寫後通過啦^__^
    參考代碼如下:
    <asp:TemplateColumn HeaderText="数量"> 
      <ItemTemplate>
       <asp:TextBox id="ShuLiang" runat='server' Text='<%# DataBinder.Eval(Container.DataItem,"DG_ShuLiang")%>'  
        onkeyup=DoCal()"
       />   <asp:RegularExpressionValidator id="revS" runat="server" ControlToValidate="ShuLiang" ErrorMessage="must be integer" ValidationExpression="^\d+$" />
      </ItemTemplate>
          </asp:TemplateColumn>      <asp:TemplateColumn HeaderText="单价"> 
      <ItemTemplate>
       <asp:TextBox id="DanJian" runat='server' Text='<%# DataBinder.Eval(Container.DataItem,"DG_DanJian")%>' 
        onkeyup=DoCal()"
       />  <asp:RegularExpressionValidator id="revS2" runat="server" ControlToValidate="DanJian" ErrorMessage="must be numeric" ValidationExpression="^\d+(\.\d*)?$" />  </ItemTemplate>
          </asp:TemplateColumn>     <asp:TemplateColumn HeaderText="金额"> 
      <ItemTemplate>
       <asp:TextBox id="JinE" runat='server' Text='<%# DataBinder.Eval(Container.DataItem,"DG_JinE")%>' />
      </ItemTemplate>
          </asp:TemplateColumn><script language="javascript">
    function DoCal()
    {
      var e = event.srcElement;
      var row = e.parentNode.parentNode;
      var txts = row.all.tags("INPUT");
      if (!txts.length || txts.length < 3)
     return;
     
      var q = txts[txts.length-3].value;
      var p = txts[txts.length-2].value;  if (isNaN(q) || isNaN(p))
     return;  q = parseInt(q);
      p = parseFloat(p);  txts[txts.length-1].value = (q * p).toFixed(2);
    }
    </script>