GridView中有三个TextBox它们分别是txtNumber1、txtNumber2和txtNumber3,当用户在txtNumber1和txtNumber2中输入数字后将通过计算在txtNumber3中生成数字。
1)前台代码
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication11._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
<script language="javascript" type="text/javascript" src="jquery-1.5.1.min.js"></script>
<script language="javascript" type="text/javascript">
function calc(id, type) {//计算num1-num2
var n1id; //txtNumer1的ClientID
var n2id; //txtNumber2的ClientID
var n3id; //txtNumber3的ClientID
var hid; //hfNumber3的ClientID
switch (type) {
case "num1":
n1id = id;
var strs = new Array();
strs = n1id.split('_');
n2id = strs[0] + '_' + strs[1] + '_' + "txtNumer2";
n3id = strs[0] + '_' + strs[1] + '_' + "txtNumer3";
hid = strs[0] + '_' + strs[1] + '_' + "hfNumber3";
var n1 = $('#' + n1id).val();
var n2 = $('#' + n2id).val();
if (n1 != '' && n2 != '') {
$('#' + n3id).val(parseInt(n1) - parseInt(n2));
$('#' + hid).val(parseInt(n1) - parseInt(n2)); //将数据存到隐藏域中以便后台获取
}
break;
case "num2":
n2id = id;
var strs = new Array();
strs = n2id.split('_');
n1id = strs[0] + '_' + strs[1] + '_' + "txtNumer1";
n3id = strs[0] + '_' + strs[1] + '_' + "txtNumer3";
hid = strs[0] + '_' + strs[1] + '_' + "hfNumber3";
var n1 = $('#' + n1id).val();
var n2 = $('#' + n2id).val();
if (n1 != '' && n2 != '') {
$('#' + n3id).val(parseInt(n1) - parseInt(n2));
$('#' + hid).val(parseInt(n1) - parseInt(n2)); //将数据存到隐藏域中以便后台获取
}
break;
default:
break;
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="gvwTest" runat="server" AutoGenerateColumns="false"
onrowcommand="gvwTest_RowCommand">
<Columns>
<asp:TemplateField HeaderText="num1">
<ItemTemplate>
<asp:TextBox ID="txtNumer1" runat="server" onblur="calc(this.id,'num1');"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="num2">
<ItemTemplate>
<asp:TextBox ID="txtNumer2" runat="server" onblur="calc(this.id,'num2');"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="num3">
<ItemTemplate>
<asp:TextBox ID="txtNumer3" runat="server" ReadOnly="true"></asp:TextBox>
<asp:HiddenField ID="hfNumber3" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="result">
<ItemTemplate>
<asp:Button ID="Button1" runat="server" Text="btnResult" CommandName="result" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Label ID="lblMessage" runat="server" Text="" style="color:Red;"></asp:Label>
</div>
</form>
</body>
</html>
2)后台代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
namespace WebApplication11
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindTest();
}
}
/// <summary>
/// 绑定数据
/// </summary>
private void BindTest()
{
DataTable dtTest = new DataTable();
dtTest.Columns.Add(new DataColumn("test"));
DataRow drTest1 = dtTest.NewRow();
drTest1["test"] = "1";
dtTest.Rows.Add(drTest1);
DataRow drTest2 = dtTest.NewRow();
drTest2["test"] = "2";
dtTest.Rows.Add(drTest2);
DataRow drTest3 = dtTest.NewRow();
drTest3["test"] = "2";
dtTest.Rows.Add(drTest3);
gvwTest.DataSource = dtTest;
gvwTest.DataBind();
}
/// <summary>
/// 后台获取HiddenField的Value和TextBox的Text
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gvwTest_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "result")
{
//获取当前row
GridViewRow gridViewRow = (GridViewRow)((Button)e.CommandSource).NamingContainer;
//后台获取HiddenField的Value发现其结果不为空
HiddenField hfNum3 = (HiddenField)gridViewRow.FindControl("hfNumber3");
string hfResult = hfNum3.Value;
//后台获取TextBox的Text发现其结果为空原因是TextBox用了ReadOnly="true"
TextBox txtNumer3 = (TextBox)gridViewRow.FindControl("txtNumer3");
string txtResult = txtNumer3.Text;
lblMessage.Text = hfResult;
}
}
}
}