假设你的textbox所在模板列是第一列, textbox是模板列里的第一个控件. function checkJockeyID() { //Get ID in Page of the DataGrid var strGridID = '<%=this.Grid.ClientID%>'; var objGrid = document.getElementById(strGridID); var iRowCount = objGrid.rows.length; var total ; for(var i = 1;i<iRowCount;i++) { var txt = objGrid.rows(i).cells(0).children(0); total = total + parseInt(txt.value); } 显示的控件.某个属性 = total; }
//编译错处,出错提示为: 编译器错误信息: BC30451: 名称“this”未声明。源错误: 行 14: { 行 15: //Get ID in Page of the DataGrid 行 16: var strGridID = '<%=this.Grid.ClientID%>'; 行 17: var objGrid = document.getElementById(strGridID); 行 18: var iRowCount = objGrid.rows.length;//我在代码中是这样写的 Dim txtCB As TextBox txtCB = e.Item.FindControl("textbox1") txtCB.Attributes.Add("onChange", "checkJockeyID()") 我写在datagrid的itemDataBind中请再帮我看看,为什么会出错哦
var strGridID = '<%=this.Grid.ClientID%>'; 这里的Grid等于你为datagrid指定的id属性.
后台调用代码: If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then Dim txtCB As TextBox txtCB = e.Item.FindControl("TextBox2") txtCB.Attributes.Add("onChange", "checkJockeyID()") End If 前台函数: <script language="javascript"> <!-- function checkJockeyID() { //Get ID in Page of the DataGrid var strGridID = '<%=me.DataGrid1.ClientID%>'; var objGrid = document.getElementById(strGridID); var iRowCount = objGrid.rows.length; var total ; for(var i = 1;i<iRowCount;i++) { var txt = objGrid.rows(i).cells(0).children(0); total = total + parseInt(txt.value); } Label2.text = total; }//--> </script> -------------------------------------------- 当我改变了datagrid中textbox2的值的时候,没有什么改变, 高手,请再指教一下,哪里出了问题
得到了一些NaN的值,~~~~~~~~~~~ ?
前台: <body class="homeBody"> <form id="form1" runat="server" method="get"> <div> <asp:DataGrid ID="DataGrid1" runat="server" OnItemDataBound="DataGrid1_ItemDataBound" AutoGenerateColumns="false"> <Columns> <asp:TemplateColumn HeaderText=""> <ItemTemplate> <asp:TextBox ID="TextBox1" runat="server" Text='<%#Container.DataItem %>'></asp:TextBox> </ItemTemplate> </asp:TemplateColumn> </Columns> </asp:DataGrid> </div> <span id="result"></span> </form> </body> <script type="text/javascript" language="javascript"> function cal() { var strGridID = '<%=this.DataGrid1.ClientID%>'; var objGrid = document.getElementById(strGridID); var iRowCount = objGrid.rows.length; var total = 0; for(var i = 1;i<iRowCount;i++) { var txt = objGrid.rows(i).cells(0).children(0); total = total + parseInt(txt.value); } result.innerText = "Total:" + total.toString(); } </script>后台: protected void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e) { if (e.Item.ItemIndex > -1) { TextBox txt = (TextBox)e.Item.FindControl("TextBox1"); txt.Attributes.Add("onblur", "cal();"); } } protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { int[] ds = new int[] { 1, 2, 3, 4, 5 }; DataGrid1.DataSource = ds; DataGrid1.DataBind(); } }c#的, 已测试. 你对照着看一下, 根据你的需求改成vb.net的.
前台:
function cal()
{
//遍历datagrid每一行,datagrid在客户端是个table.
}
行行好,能详细讲解一下吗?能稍微麻烦的话,就请帮助写一下这个cal的函数,JavaScript小弟非常的不熟息~
function checkJockeyID()
{
//Get ID in Page of the DataGrid
var strGridID = '<%=this.Grid.ClientID%>';
var objGrid = document.getElementById(strGridID);
var iRowCount = objGrid.rows.length;
var total ;
for(var i = 1;i<iRowCount;i++)
{
var txt = objGrid.rows(i).cells(0).children(0);
total = total + parseInt(txt.value);
}
显示的控件.某个属性 = total;
}
编译器错误信息: BC30451: 名称“this”未声明。源错误:
行 14: {
行 15: //Get ID in Page of the DataGrid
行 16: var strGridID = '<%=this.Grid.ClientID%>';
行 17: var objGrid = document.getElementById(strGridID);
行 18: var iRowCount = objGrid.rows.length;//我在代码中是这样写的
Dim txtCB As TextBox
txtCB = e.Item.FindControl("textbox1")
txtCB.Attributes.Add("onChange", "checkJockeyID()")
我写在datagrid的itemDataBind中请再帮我看看,为什么会出错哦
var strGridID = '<%=this.datagrid1.ClientID%>';
是不是这样,
但是还是编译出错,仍然这样:
//编译错处,出错提示为:
编译器错误信息: BC30451: 名称“this”未声明。还有其他需要注意的地方吗?是不是我其他地方弄错了
~
用<%=Me.datagrid1.ClientID%>试试
If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
Dim txtCB As TextBox
txtCB = e.Item.FindControl("TextBox2")
txtCB.Attributes.Add("onChange", "checkJockeyID()")
End If
前台函数:
<script language="javascript">
<!--
function checkJockeyID()
{
//Get ID in Page of the DataGrid
var strGridID = '<%=me.DataGrid1.ClientID%>';
var objGrid = document.getElementById(strGridID);
var iRowCount = objGrid.rows.length;
var total ;
for(var i = 1;i<iRowCount;i++)
{
var txt = objGrid.rows(i).cells(0).children(0);
total = total + parseInt(txt.value);
}
Label2.text = total;
}//-->
</script>
--------------------------------------------
当我改变了datagrid中textbox2的值的时候,没有什么改变,
高手,请再指教一下,哪里出了问题
?
<body class="homeBody">
<form id="form1" runat="server" method="get">
<div>
<asp:DataGrid ID="DataGrid1" runat="server" OnItemDataBound="DataGrid1_ItemDataBound" AutoGenerateColumns="false">
<Columns>
<asp:TemplateColumn HeaderText="">
<ItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%#Container.DataItem %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</div>
<span id="result"></span>
</form>
</body>
<script type="text/javascript" language="javascript">
function cal()
{
var strGridID = '<%=this.DataGrid1.ClientID%>';
var objGrid = document.getElementById(strGridID);
var iRowCount = objGrid.rows.length;
var total = 0;
for(var i = 1;i<iRowCount;i++)
{
var txt = objGrid.rows(i).cells(0).children(0); total = total + parseInt(txt.value);
}
result.innerText = "Total:" + total.toString();
}
</script>后台:
protected void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if (e.Item.ItemIndex > -1)
{
TextBox txt = (TextBox)e.Item.FindControl("TextBox1");
txt.Attributes.Add("onblur", "cal();");
}
} protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
int[] ds = new int[] { 1, 2, 3, 4, 5 };
DataGrid1.DataSource = ds;
DataGrid1.DataBind();
}
}c#的, 已测试. 你对照着看一下, 根据你的需求改成vb.net的.
好像都是JacaScript的高级部分的东西~崇拜中