如何动态统计DATAGRID里模版列(textbox)的数据?
尝试过写autopostback,结果因为模版列的textbox的id是变的,没办法进行统计.
想问下有其他方法解决吗?谢谢
问题点数:20、回复次数:9Top
1 楼q_po_o(两个人)回复于 2005-11-21 11:27:16 得分 0
不明白??Top
2 楼ff167(没有)回复于 2005-11-21 11:33:14 得分 0
比如说这样的网格
AAAAA|BBBBB|CCCCC
0| 1000| 100
1| 100|
2| 10| 10
最后的CCCCC就是一个模版列,是textbox,为了要编辑数据而出来的,我这里的设计是可以批量修改数据,但现在就想对CCCCC这列的数据进行动态统计,就是输入数后,在行尾把输入数据的总和显示出来.如果用按钮来提交的话当然是可以的,但想用autopostback来进行计算,就不知道应该怎么做了.
谢谢Top
3 楼ff167(没有)回复于 2005-11-21 14:13:13 得分 0
提一下
Top
4 楼j_lei407(落日一笑)回复于 2005-11-21 15:20:59 得分 0
mark!Top
5 楼junhao_666()回复于 2005-11-22 08:46:29 得分 0
可以试一下遍历那一列的单元格 怎么样?
float count=0;
for(int i=0;i<e.Item.Cells.Count-1;i++)
{
count=count+e.Item.Cells[i].text;
}Top
6 楼swellxxj(一剑飘香)回复于 2005-11-22 09:52:38 得分 5
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
}Top
7 楼q_po_o(两个人)回复于 2005-11-22 12:00:19 得分 15
看了思归的,写的:)
<%@ 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>
Top
8 楼ff167(没有)回复于 2005-11-22 14:49:14 得分 0
谢谢楼上两位,代码能用,顺便补一个问题.
用上面的例子,如果我想用BBBBB列的数字减去CCCCC(就是INPUT)列的数值,JAVASCRIPT里应该怎么取BBBBB行的值呢?谢谢,我自己试写了几个都失败,找帮助文件里也没找到办法.Top
9 楼q_po_o(两个人)回复于 2005-11-22 21:31:58 得分 0
转贴
在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>Top




