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 }
AAAAA|BBBBB|CCCCC
0| 1000| 100
1| 100|
2| 10| 10最后的CCCCC就是一个模版列,是textbox,为了要编辑数据而出来的,我这里的设计是可以批量修改数据,但现在就想对CCCCC这列的数据进行动态统计,就是输入数后,在行尾把输入数据的总和显示出来.如果用按钮来提交的话当然是可以的,但想用autopostback来进行计算,就不知道应该怎么做了.谢谢
for(int i=0;i<e.Item.Cells.Count-1;i++)
{
count=count+e.Item.Cells[i].text;
}
{
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
}
<!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>
我有一個頁面但由於筆數不確定,所以只能採用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>