<asp:TemplateField HeaderText="数量">
                                <EditItemTemplate>
                                    <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("[T-jpcs1]") %>'></asp:TextBox>
                                </EditItemTemplate>
                                <ItemTemplate>
                                    <asp:Label ID="a" runat="server" Text='<%# Bind("[T-jpcs1]") %>'  ></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
 <asp:TemplateField HeaderText="单价">
                                <EditItemTemplate>
                                    <asp:TextBox ID="TextBox8" runat="server"></asp:TextBox>
                                </EditItemTemplate>
                                <ItemTemplate>
                                    <asp:TextBox ID="b" runat="server" onkeydown="checkFloat(event)" Width="100px"   ></asp:TextBox>
                                </ItemTemplate>
                            </asp:TemplateField>
  <asp:TemplateField HeaderText="总金额">
                                <EditItemTemplate>
                                    <asp:TextBox ID="TextBox10" runat="server"></asp:TextBox>
                                </EditItemTemplate>
                                <ItemTemplate>
                                    <asp:TextBox ID="c" runat="server" Width="100px" onkeydown="checkFloat(event)" ></asp:TextBox>
                                </ItemTemplate>
                            </asp:TemplateField>
用js 
计算数量*单价=总金额 
其中数量是通过数据源绑定的~单价直接在GridView上输入,输入单价后计算结果自动显示在总金额文本框内! 
求js代码!

解决方案 »

  1.   

    55555你给我的方法可行但是里面出现了客户端控件~我的通过吧整个GridView放到DataTable的~让后一起提交到数据库!
    刚开始米发现最后测试时才发现不行的··5555郁闷啊··
      

  2.   

    呵呵,那就改改:    <script type="text/javascript">
            function checkFloat(e) {
                return (e.keyCode >= 48 && e.keyCode <= 57) || e.keyCode == 8 || e.keyCode == 46 || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 190 || e.keyCode == 110 ? true : false;
            }        function Cal(tb) {
                var b = parseFloat(tb.value);
                var par = tb.parentElement || tb.parentNode;
                var a = parseFloat(par.previousSibling.getElementsByTagName("span")[0].innerHTML);
                var tbC = par.nextSibling.getElementsByTagName("input")[0];
                tbC.value = a * b;
            }
        </script>
                    <asp:TemplateField HeaderText="数量">
                        <EditItemTemplate>
                            <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("[T-jpcs1]") %>'></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="a" runat="server" Text='<%# Bind("[T-jpcs1]") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="单价">
                        <EditItemTemplate>
                            <asp:TextBox ID="TextBox8" runat="server"></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:TextBox ID="b" runat="server" Width="100px" onkeydown="return checkFloat(event)" onkeyup='Cal(this)' ></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="总金额">
                        <EditItemTemplate>
                            <asp:TextBox ID="TextBox10" runat="server"></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:TextBox ID="c" runat="server" Width="100px" onkeydown="return checkFloat(event)"></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
      

  3.   


    报错parseFloat(par.previousSibling.getElementsByTagName("span")[0].innerHTML);为空没取到值
      

  4.   

    查询gridview每列值,再计算
    参考
      

  5.   

    我测试过没有问题的哦,哪个为空啊?
    你把生成的html源码贴上来看看
      

  6.   

    <asp:TemplateField HeaderText="单价">
                                    <EditItemTemplate>
                                        <asp:TextBox ID="TextBox8" runat="server"></asp:TextBox>
                                    </EditItemTemplate>
                                    <ItemTemplate>
                                    <asp:TextBox ID="TextBoxf" runat="server" Width="55px" onkeydown="checkFloat(event)"  onkeyup='Cal(this)' ></asp:TextBox>
                                    </ItemTemplate>
    报错parseFloat(par.previousSibling.getElementsByTagName("span")[0].innerHTML);为空或不是对象~
      

  7.   

    我是让你贴生成以后的html源码,不是设计阶段的html源码
    就是运行你的网站,然后用浏览器的“查看源码”功能
      

  8.   

                                        <input name="GridView1$ctl02$TextBox2" type="text" value="FAB-1171/SF/XII/O8FAB-1171/SF/XII/O8网布58/60&quot;棕色" readonly="readonly" id="GridView1_ctl02_TextBox2" style="height:0px;width:0px;" />
                                    </td><td>FAB-1171/SF/XII/O8</td><td>网布</td><td>棕色</td><td>
                                        <span id="GridView1_ctl02_a">1000</span>
                                    </td><td>
                                        <input name="GridView1$ctl02$TextBox4t" type="text" value="58/60&quot;" readonly="readonly" id="GridView1_ctl02_TextBox4t" />
                                    </td><td>
                                        <input name="GridView1$ctl02$TextBox4" type="text" value="请添加" id="GridView1_ctl02_TextBox4" onfocus="cls()" onblur="res()" style="width:100px;" />
                                    </td><td>
                                        <input name="GridView1$ctl02$TextBox6" type="text" value="请添加" id="GridView1_ctl02_TextBox6" onfocus="cls()" onblur="res()" style="width:100px;" />
                                    </td><td>
                                    <input name="GridView1$ctl02$TextBoxf" type="text" value="0" id="GridView1_ctl02_TextBoxf" onkeydown="checkFloat(event)" onfocus="cls()" onblur="res()" onkeyup="Cal(this)" style="width:55px;" />
                                    </td><td>
                                        <input name="GridView1$ctl02$c" type="text" value="0" readonly="readonly" id="GridView1_ctl02_c" onkeydown="checkFloat(event)" onfocus="cls()" onblur="res()" style="width:100px;" />
                                    </td><td>
                                        <textarea name="GridView1$ctl02$TextBox13" rows="2" cols="20" id="GridView1_ctl02_TextBox13" onfocus="cls()" onblur="res()" style="height:50px;width:150px;">无</textarea>
                                    </td><td>
                                        <input name="GridView1$ctl02$TextBoxe" type="text" value="MLHT-200904110001" id="GridView1_ctl02_TextBoxe" style="height:0px;width:0px;" />
                                    </td>
      

  9.   


     <span id="GridView1_ctl02_a">1000</span>这行是数量
      

  10.   

    汗,原来你这列的位置跟你提问的例子不一样的啊,        function Cal(tb) {
                var b = parseFloat(tb.value);
                if (!isNaN(b)) {
                    var p1 = tb.parentElement || tb.parentNode;
                    var par = p1.parentElement || p1.parentNode;
                    var a = parseInt(par.childNodes[0].getElementsByTagName("span")[0].innerHTML);//这里的childNodes[0]中的0你自己换成“数量”列的索引
                    var tbC = par.childNodes[2].getElementsByTagName("input")[0];//这里的2你自己换成“总金额”列的索引
                    tbC.value = a * b;
                }
            }
      

  11.   


    拜谢ojlovecd大大···
    结贴给分咯!
      

  12.   

    "var a = parseFloat(par.previousSibling.getElementsByTagName("span")[0].innerHTML);"
    请问下span元素,在前台/后台是怎么写的呢,才让这个js语句辨别它呢???