图片如上,要实现的功能是:
我填写数量的时候,可以根据单价自动算出金额,并且统计出“选择”勾上了的总金额。
数量单价金额的aspx代码:
               <asp:TemplateField HeaderText="数量">
                    <ItemTemplate>
                        <asp:TextBox ID="tbNum" runat="server" Style="z-index: 100; left: 34px;width:70px" AutoPostBack="True" OnTextChanged="tbNum_TextChanged"></asp:TextBox>
                    </ItemTemplate>
               </asp:TemplateField>
                <asp:BoundField DataField="ItemPrice" HeaderText="单价" SortExpression="c.ItemPrice" >
                    <HeaderStyle Wrap="False" />
                    <ItemStyle Wrap="False" />
                </asp:BoundField>
               <asp:TemplateField HeaderText="金额">
                    <ItemTemplate>
                        <asp:TextBox ID="tbMoney" runat="server" Style="z-index: 100; left: 34px;width:70px" ReadOnly="True" AutoPostBack="True"></asp:TextBox>
                        <%--<asp:Label ID="lbMoney" runat="server"></asp:Label>--%>
                    </ItemTemplate>
               </asp:TemplateField>

解决方案 »

  1.   

    本人不才 我一般都是在gridview的DataBound事件里把gridview中要参与计算的控件循环出(找出来)并将其控件名修改(就是控件名根据循环修改成有规律的名字,比control.name = "text" + i),各个参与计算的控件都有了你所了解的名字,就可以用Js去操作画面上显示的GridView了,画面上的GridView其实就是个Table。麻烦点,但不是很难。
    提供个思路,不一定是最好的~  个人观点~ ^_^
      

  2.   

    绑定时给 tbNum 加上客户端事件(onpropertychange),不用服务端事件
    <script language="javascript">
        <!--
        function changeStatus(e){
        var currentRow = event.srcElement.parentElement.parentElement;
    var currentCheckbox = currentRow.cells[0].firstChild;
        var currentTextBox = currentRow.cells[3].firstChild;    
    if(event.srcElement.value != '')
    {   
    var currentNum = event.srcElement.value;    
    var currentPrice = currentRow.cells[2].innerText;   
         currentCheckbox.checked = true;
     currentTextBox.value = parseFloat(currentNum) * parseFloat(currentPrice);
         }
     else
     {
       currentTextBox.value = '';
             currentCheckbox.checked = false;
     }
    }
        // -->
    </script>
                     <table border="0" cellpadding="0" cellspacing="0" >
                        <tr >
                            <td ><input type="checkbox" id="checkboxSelect"></td>
                            <td ><input type="text" id="tbNum" onpropertychange="changeStatus(this)" /></td>
                           <td >25</td>
                            <td ><input type="text" id="tbMoney" /></td>
                        </tr>
                    </table>
      

  3.   

    统计出“选择”勾上了的总金额又该怎么写啊?谢谢ls的,麻烦能给出具体点的代码吗?偶js比较菜...
      

  4.   

    加上 单选框,金额框不允许手动修改保护吧<script language="javascript">
        <!--
        function changeStatus(e){
        var currentRow = event.srcElement.parentElement.parentElement;
    var currentCheckbox = currentRow.cells[0].firstChild;
        var currentTextBox = currentRow.cells[3].firstChild;    
    if(event.srcElement.value != '')
    {   
    var currentNum = event.srcElement.value;    
    var currentPrice = currentRow.cells[2].innerText;   
         currentCheckbox.checked = true;
     currentTextBox.value = parseFloat(currentNum) * parseFloat(currentPrice);
         }
     else
     {
       currentTextBox.value = '';
             currentCheckbox.checked = false;
     }
    var conditionTable = document.getElementById('mytable');
    var pirceCount = '0';
        for (i = 0; i < conditionTable.rows.length; i++) {
    var cCheckbox = conditionTable.rows[i].cells[0].firstChild;
    if(cCheckbox.checked)
    {
       var cTextBox = conditionTable.rows[i].cells[3].firstChild;
       var cValue = cTextBox.value; 
       if(cValue!='')
       {
                      pirceCount = parseFloat(pirceCount) + parseFloat(cValue);
       }             
    }
    }
    alert(pirceCount);
         document.getElementById('allCount').innerText = pirceCount;
    }
        // -->
    </script>
                     <table border="0" cellpadding="0" cellspacing="0" id="mytable">
                        <tr >
                            <td ><input type="checkbox" id="checkboxSelect0"></td>
                            <td ><input type="text" id="tbNum0" onpropertychange="changeStatus(this)" /></td>
                           <td >25</td>
                            <td ><input type="text" id="tbMoney0" /></td>
                        </tr>
                        <tr >
                            <td ><input type="checkbox" id="checkboxSelect1"></td>
                            <td ><input type="text" id="tbNum1" onpropertychange="changeStatus(this)" /></td>
                           <td >25</td>
                            <td ><input type="text" id="tbMoney1" /></td>
                        </tr>
                           <tr >
                            <td ><input type="checkbox" id="checkboxSelect2"></td>
                            <td ><input type="text" id="tbNum2" onpropertychange="changeStatus(this)" /></td>
                           <td >50</td>
                            <td ><input type="text" id="tbMoney2" /></td>
                        </tr>
                    </table>
                     <span id= "allCount"> </span>
      

  5.   

    在服务器端生成grid的时候,给每个文本框赋上一样的脚本,参数里加一个grid显示的总行数,
    在脚本里循环总行数计算就可以了.
      

  6.   

    为什么我:if(currentCheckbox.checked == true){...}里面的代码不会执行的?
    恩,只填数量,单价是后台取出来的,单价和金额是readonly="true"的哈。
    我是想,如果选择框没勾上,则金额不会计算的,勾上了才会去计算哈,然后算下所有勾上的那行记录的金额求和一下。