在服务器端如下:
//首先找出datagrid中的txtUnitAmount控件
private void dgBody_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
try
{
if(e.Item.Cells[5].FindControl("txtUnitAmount")!= null)
{
int inttemp1=0;
TextBox txtUnitAmount=(TextBox)e.Item.Cells[5].FindControl("txtUnitAmount");
if (txtUnitAmount.Text.ToString()=="")
{
inttemp1=0;
}
else
{
inttemp1=Convert.ToInt32(txtUnitAmount.Text.ToString());
}
if(e.Item.Cells[0].FindControl("DropListPackage")!= null)
{
DropDownList DropListPackage=(DropDownList)e.Item.Cells[3].FindControl("DropListPackage");
int inttemp2=Convert.ToInt32(DropListPackage.SelectedItem.Value.ToString());
txtUnitAmount.Attributes.Add("onchange","Calculate(inttemp1,inttemp2)");
}
}
}
catch(Exception ex)
{
Response.Write(ex.ToString());
}
}
aspx中的javascript
<script language="javascript">
function Calculate(int intUnitAmount,int intInerAmount)
{
var totalAmount=intUnitAmount*intInerAmount;
PreInStock.txtTotalAmount.value=totalAmount;
}
</script>
其中页面上的控件如下:
<asp:TemplateColumn HeaderText="包装数量">
<ItemTemplate>
<asp:Repeater runat="server" DataSource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("Product_Package") %>'>
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "[\"InterAmount\"]") %>
<%# DataBinder.Eval(Container.DataItem, "[\"AmountUnit\"]") %>
/<%# DataBinder.Eval(Container.DataItem, "[\"UnitName\"]") %><br>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="件数">
<ItemTemplate>
<asp:TextBox id="txtUnitAmount" Width="35px" Text='<%# DataBinder.Eval(Container.DataItem, "UnitAmount") %>' runat=server AutoPostBack=True>
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="总数">
<ItemTemplate>
<INPUT style="WIDTH: 34px; HEIGHT: 21px" type=text size=1 value='<%# DataBinder.Eval(Container.DataItem, "TotalAmount") %>' runat="server" id="txtTotalAmount">
</ItemTemplate>
</asp:TemplateColumn>
10 个解决方案
#1
你是在什麼時候綁定的。確保是在edit狀態下才有textbox控件。
#2
To:ld_key(什么名字也想)
我在page_load中就绑定的,什么是edit状态下?应该再datagrid的什么事件中获取绑定到它的textbox控件的客户端id? 你看我用的是dgBody_ItemCreated事件,是不是不该再这个事件中写呀?
我在page_load中就绑定的,什么是edit状态下?应该再datagrid的什么事件中获取绑定到它的textbox控件的客户端id? 你看我用的是dgBody_ItemCreated事件,是不是不该再这个事件中写呀?
#3
应该有办法解决的亚,我现在用的是很苯的办法,就是每次输入件数后,把autopostback设置为true,然后提交到服务器端来通过计算,得出总数,在绑定显示,到能实现了,但是也太笨了,有谁可以帮我呀?
#4
我想了个方法,就是datagrid中加设编辑列,在另一个textbox的属性为onlyread=true,当用户在一个textbox输入件数单击编辑重的更新,在该事件中计算出数量,不用javasript不知道是否能满足你的需求否!!
#5
学习
#6
我是这样实现的,在datagrid绑定后插入一些脚本定义对textbox的前端onchange的处理.
js中写一个带参数的函数根据参数对相应的textbox的onchage事件进行处理.
.cs
for(int i=0;i<ds.Tables[0].Rows.Count;i++)
Response.Write("<script for='AppGrid__ctl"+(i+3).ToString()+"_TextBox1' event='onchange'>TextBoxOnChange('"+(i+1).ToString()+"');</script>");
javascript:
function CheckBoxOnClick(i)
{
//alert(document.all.AppGrid.rows[i].cells[1].innerText);
var TextBoxID=eval("document.all."+"AppGrid__ctl"+(parseInt(i)+2)+"_TextBox1");
//TextBoxID.value=这里你自己处理吧
}
注:AppGrid__ctl"+(i+3).ToString()+"_TextBox1,是你的textBox clientid, 你的根据html源文件 看到
js中写一个带参数的函数根据参数对相应的textbox的onchage事件进行处理.
.cs
for(int i=0;i<ds.Tables[0].Rows.Count;i++)
Response.Write("<script for='AppGrid__ctl"+(i+3).ToString()+"_TextBox1' event='onchange'>TextBoxOnChange('"+(i+1).ToString()+"');</script>");
javascript:
function CheckBoxOnClick(i)
{
//alert(document.all.AppGrid.rows[i].cells[1].innerText);
var TextBoxID=eval("document.all."+"AppGrid__ctl"+(parseInt(i)+2)+"_TextBox1");
//TextBoxID.value=这里你自己处理吧
}
注:AppGrid__ctl"+(i+3).ToString()+"_TextBox1,是你的textBox clientid, 你的根据html源文件 看到
#7
不过用onkeypress事件会好一些,例
<input type=text onkeypress="javascript:if(event.keyCode==13){alert('a');return false;}">
<input type=text onkeypress="javascript:if(event.keyCode==13){alert('a');return false;}">
#8
先up一下:)噢
#9
to Cnapollo(旁痞): 我按照你写的试了一下,不行呀,根本就不响应cs中加入的CheckBoxOnClick(i)事件,是不是cs写得不对呀?不过你这种实现方式倒是很好,但是为什么不行呢?好像cs中的Response.Write("<script for='AppGrid__ctl"+(i+3).ToString()+"_TextBox1' event='onchange'>TextBoxOnChange('"+(i+1).ToString()+"');</script>");
根本就没有加上它的change事件!
你试过吗?成功了吗?
根本就没有加上它的change事件!
你试过吗?成功了吗?
#10
呵呵,是我搞错了,嘿嘿,不错不错,舒服舒服,我马上结贴给分,先谢谢诸位了!
to Cnapollo(旁痞) :谢谢你呀!祝你早日升上星星亚!
to Cnapollo(旁痞) :谢谢你呀!祝你早日升上星星亚!
#1
你是在什麼時候綁定的。確保是在edit狀態下才有textbox控件。
#2
To:ld_key(什么名字也想)
我在page_load中就绑定的,什么是edit状态下?应该再datagrid的什么事件中获取绑定到它的textbox控件的客户端id? 你看我用的是dgBody_ItemCreated事件,是不是不该再这个事件中写呀?
我在page_load中就绑定的,什么是edit状态下?应该再datagrid的什么事件中获取绑定到它的textbox控件的客户端id? 你看我用的是dgBody_ItemCreated事件,是不是不该再这个事件中写呀?
#3
应该有办法解决的亚,我现在用的是很苯的办法,就是每次输入件数后,把autopostback设置为true,然后提交到服务器端来通过计算,得出总数,在绑定显示,到能实现了,但是也太笨了,有谁可以帮我呀?
#4
我想了个方法,就是datagrid中加设编辑列,在另一个textbox的属性为onlyread=true,当用户在一个textbox输入件数单击编辑重的更新,在该事件中计算出数量,不用javasript不知道是否能满足你的需求否!!
#5
学习
#6
我是这样实现的,在datagrid绑定后插入一些脚本定义对textbox的前端onchange的处理.
js中写一个带参数的函数根据参数对相应的textbox的onchage事件进行处理.
.cs
for(int i=0;i<ds.Tables[0].Rows.Count;i++)
Response.Write("<script for='AppGrid__ctl"+(i+3).ToString()+"_TextBox1' event='onchange'>TextBoxOnChange('"+(i+1).ToString()+"');</script>");
javascript:
function CheckBoxOnClick(i)
{
//alert(document.all.AppGrid.rows[i].cells[1].innerText);
var TextBoxID=eval("document.all."+"AppGrid__ctl"+(parseInt(i)+2)+"_TextBox1");
//TextBoxID.value=这里你自己处理吧
}
注:AppGrid__ctl"+(i+3).ToString()+"_TextBox1,是你的textBox clientid, 你的根据html源文件 看到
js中写一个带参数的函数根据参数对相应的textbox的onchage事件进行处理.
.cs
for(int i=0;i<ds.Tables[0].Rows.Count;i++)
Response.Write("<script for='AppGrid__ctl"+(i+3).ToString()+"_TextBox1' event='onchange'>TextBoxOnChange('"+(i+1).ToString()+"');</script>");
javascript:
function CheckBoxOnClick(i)
{
//alert(document.all.AppGrid.rows[i].cells[1].innerText);
var TextBoxID=eval("document.all."+"AppGrid__ctl"+(parseInt(i)+2)+"_TextBox1");
//TextBoxID.value=这里你自己处理吧
}
注:AppGrid__ctl"+(i+3).ToString()+"_TextBox1,是你的textBox clientid, 你的根据html源文件 看到
#7
不过用onkeypress事件会好一些,例
<input type=text onkeypress="javascript:if(event.keyCode==13){alert('a');return false;}">
<input type=text onkeypress="javascript:if(event.keyCode==13){alert('a');return false;}">
#8
先up一下:)噢
#9
to Cnapollo(旁痞): 我按照你写的试了一下,不行呀,根本就不响应cs中加入的CheckBoxOnClick(i)事件,是不是cs写得不对呀?不过你这种实现方式倒是很好,但是为什么不行呢?好像cs中的Response.Write("<script for='AppGrid__ctl"+(i+3).ToString()+"_TextBox1' event='onchange'>TextBoxOnChange('"+(i+1).ToString()+"');</script>");
根本就没有加上它的change事件!
你试过吗?成功了吗?
根本就没有加上它的change事件!
你试过吗?成功了吗?
#10
呵呵,是我搞错了,嘿嘿,不错不错,舒服舒服,我马上结贴给分,先谢谢诸位了!
to Cnapollo(旁痞) :谢谢你呀!祝你早日升上星星亚!
to Cnapollo(旁痞) :谢谢你呀!祝你早日升上星星亚!