有这么一个GridView:
<asp:GridView ID="GridView_listNo" runat="server" Width="100%" AutoGenerateColumns="False" DataKeyNames="OID" CssClass="GView_BodyCSS" OnRowCancelingEdit="GridView_listNo_RowCancelingEdit" OnRowDataBound="GridView_listNo_RowDataBound" OnRowEditing="GridView_listNo_RowEditing" OnRowUpdating="GridView_listNo_RowUpdating">
<Columns>
<asp:TemplateField HeaderText="单价">
<EditItemTemplate>
<input name="txt_procurementprice" type="text" value="<%# DataBinder.Eval(Container.DataItem, "单价")%>" style="width:50px" οnkeyup="countvalues2()" class="InputCss"/>
</EditItemTemplate>
<ItemTemplate>
<input name="txt_procurementprice2" type="text" value="<%# DataBinder.Eval(Container.DataItem, "单价")%>" style="width:50px" οnkeyup="countvalues3(this)" class="InputCss"/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="数量">
<EditItemTemplate>
<input name="txt_numberofapproved" type="text" value="<%# DataBinder.Eval(Container.DataItem, "数量")%>" style="width:50px" class="InputCss" readonly="readonly"/>
</EditItemTemplate>
<ItemTemplate>
<input name="txt_numberofapproved2" type="text" value="<%# DataBinder.Eval(Container.DataItem, "数量")%>" style="width:50px" class="InputCss" readonly="readonly"/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="金额">
<EditItemTemplate>
<input name="txt_procurementamount" type="text" value="<%# DataBinder.Eval(Container.DataItem, "金额")%>" style="width:50px" οnkeyup="countvalues2()" class="InputCss"/>
</EditItemTemplate>
<ItemTemplate>
<input name="txt_procurementamount2" type="text" value="<%# DataBinder.Eval(Container.DataItem, "金额")%>" style="width:50px" οnkeyup="countvalues3(this)" class="InputCss"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
这里要用到两个计算:1个是绑定数据源后的文本框里面做计算;一个是点编辑后的文本框里面做计算。
对应的javascript如下:
<script language="javascript" type="text/javascript">
function countvalues2()
{
var objnumber = document.getElementById("txt_numberofapproved");
var objprice = document.getElementById("txt_procurementprice");
if (objnumber.value != "" && objprice.value != "")
{
numstring="0123456789.";
for(i=0; i<objnumber.value.length;i++){
if (numstring.indexOf(objnumber.value.charAt(i))==-1){
alert("数量有错!");
return;
}
}
numstring="0123456789."
for(i=0; i<objprice.value.length;i++){
if (numstring.indexOf(objprice.value.charAt(i))==-1){
alert("单价有错!");
return;
}
}
document.getElementById("txt_procurementamount").value = (objnumber.value * objprice.value).toFixed(2);
}
}
function countvalues3(_obj) {
var tr=_obj.parentNode.parentNode;
var objnumber=tr.cells[1].firstChild;
var objprice=tr.cells[2].firstChild;
if (objnumber.value != "" && objprice.value != "")
{
numstring="0123456789.";
for(i=0; i<objnumber.value.length;i++){
if (numstring.indexOf(objnumber.value.charAt(i))==-1){
alert("数量有错!");
return;
}
}
numstring="0123456789."
for(i=0; i<objprice.value.length;i++){
if (numstring.indexOf(objprice.value.charAt(i))==-1){
alert("单价有错!");
return;
}
}
tr.cells[3].firstChild.value=((objnumber.value==""?0:objnumber.value)*(objprice.value==""?0:objprice.value)).toFixed(2);
}
}
</script>
当然在后台读取文本框内容:
1,如果是编辑下:Request.Form["txt_procurementprice"].ToString()
2,对只是绑定数据后的读取内容:就需要遍历GridView,取到某行的数据:Request.Form["txt_procurementprice2"].ToString().Split(new char[] {','})[item.RowIndex].Trim()