中有控件自动合计

sqpanda 2012-05-11 04:26:39
在<asp:GridView>中有5列<asp:TextBox>控件,第5列“总分”是前面4列的和。有没有方法,能够根据前面4列输入的数值,自动合计得到总分?
我在后台的cs文件中写了方法,在前面4列中输入数值,页面都要刷新,感觉不好,有没有不刷新页面的方法啊,比如javascript的方法。
aspx代码如下:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
<table style="width:90%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="left">
            人员绩效考评表
<asp:Button ID="Button1" runat="server" Text="保 存" onclick="btnSave_Click" />
<asp:Label ID="lblMessage" runat="server" ForeColor="Red" Font-Size="12px"></asp:Label>
</td>
</tr>
<tr>
<td align="center">
<asp:GridView ID="gvPerEva" runat="server" AllowPaging="True" AllowSorting="True"
AutoGenerateColumns="False" BackColor="White" PageSize="250"
BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="2"
GridLines="Horizontal" OnPageIndexChanging="gvPerEva_PageIndexChanging">
<AlternatingRowStyle BackColor="#F7F7F7"/>
<Columns>
<asp:BoundField DataField="工号" HeaderText="工号" ItemStyle-CssClass="hidden" HeaderStyle-

CssClass="hidden" FooterStyle-CssClass="hidden" />
<asp:BoundField DataField="姓名" HeaderText="姓名" HeaderStyle-Width="70px"/>
<asp:BoundField DataField="身份" HeaderText="身份" ItemStyle-CssClass="hidden" HeaderStyle-

CssClass="hidden" FooterStyle-CssClass="hidden" />
<asp:BoundField DataField="部门" HeaderText="部门" HeaderStyle-Width="100px"/>
<asp:BoundField DataField="职务" HeaderText="职务" HeaderStyle-Width="100px"/>
<asp:TemplateField HeaderText="工作业绩(55)" HeaderStyle-Width="100px">
<ItemTemplate><asp:TextBox id="txtPerformance" runat="server" style="width: 60%"/></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="工作态度(21)" HeaderStyle-Width="100px">
<ItemTemplate><asp:TextBox id="txtAttitude" runat="server" style="width: 60%"/></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="工作能力(18)" HeaderStyle-Width="100px">
<ItemTemplate><asp:TextBox id="txtAbility" runat="server" style="width: 60%"/></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="学识水平(6)" HeaderStyle-Width="100px">
<ItemTemplate><asp:TextBox id="txtKnowledge" runat="server" style="width: 60%"/></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="总分" HeaderStyle-Width="100px">
<ItemTemplate><asp:TextBox id="txtTotal" runat="server" style="width: 60%"/></ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
<HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
<PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Center" />
<RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
<SortedAscendingCellStyle BackColor="#F4F4FD" />
<SortedAscendingHeaderStyle BackColor="#5A4C9D" />
<SortedDescendingCellStyle BackColor="#D8D8F0" />
<SortedDescendingHeaderStyle BackColor="#3E3277" />
</asp:GridView>
</td>
</tr>
</table>
</asp:Content>
...全文
356 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangdaowu5 2012-05-16
  • 打赏
  • 举报
回复
用JS或者直接在后台操作都可以,JS蛮好实现的,后台可以在事件里面写,先FindControl找到文本框然后在赋值。
sqpanda 2012-05-16
  • 打赏
  • 举报
回复
关键点:如何利用事件源获取到选中的该行记录,从而获取前四个文本框内的值?然后相加,赋值个最后一个文本框。
[Quote=引用 7 楼 的回复:]

用js 控制, 前面四个文本框都用change(this)事件来控制最后一个文本框的值。。。
this代表本身这个控件
前面四个文本框任意一个改变都会影响到最后一个文本框的值。。
关键点:你如何利用事件源获取到选中的该行记录,从而获取最后一个文本框并赋值。。。
[/Quote]
csover8 2012-05-16
  • 打赏
  • 举报
回复
js中用这句:

document.getElementById('<%=TotalPrice.ClientID %>')

就可以获取到<asp:TextBox>里头的数值啊.
银狐被占用 2012-05-16
  • 打赏
  • 举报
回复
用jquery获取文本框的值
December28 2012-05-16
  • 打赏
  • 举报
回复
function ok(obj) {
var row = obj.parentElement.parentElement;
var txtBox1 = parseInt(row.childNodes[5].childNodes[0].value);
var txtBox2 = parseInt(row.childNodes[6].childNodes[0].value);
var txtBox3 = parseInt(row.childNodes[7].childNodes[0].value);
var txtBox4 = parseInt(row.childNodes[8].childNodes[0].value);
row.childNodes[9].childNodes[0].value = txtBox1 + txtBox2 + txtBox3 + txtBox4;
}
你试试?
sqpanda 2012-05-16
  • 打赏
  • 举报
回复
就想用JS实现,用什么方法能取得<asp:TextBox>里面的数值呢?
紫魂一号 2012-05-14
  • 打赏
  • 举报
回复
用js 控制, 前面四个文本框都用change(this)事件来控制最后一个文本框的值。。。
this代表本身这个控件
前面四个文本框任意一个改变都会影响到最后一个文本框的值。。
关键点:你如何利用事件源获取到选中的该行记录,从而获取最后一个文本框并赋值。。。
孟子E章 2012-05-14
  • 打赏
  • 举报
回复
你可以参考
<%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{

System.Data.DataTable dt = new System.Data.DataTable();
System.Data.DataRow dr;
dt.Columns.Add(new System.Data.DataColumn("ProductCode", typeof(System.String)));
dt.Columns.Add(new System.Data.DataColumn("ProductName", typeof(System.String)));
dt.Columns.Add(new System.Data.DataColumn("MallPrice", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("Num", typeof(System.Int32)));
dt.Columns.Add(new System.Data.DataColumn("Intergral", typeof(System.Int32)));
dt.Columns.Add(new System.Data.DataColumn("ProImage", typeof(System.String)));

System.Random rd = new System.Random(Environment.TickCount); ;

for (int i = 0; i < 8; i++)
{
dr = dt.NewRow();
dr[0] = "孟" + i.ToString();
dr[1] = "孟孟" + i.ToString();
dr[2] = System.Math.Round(rd.NextDouble() * 100, 2);
dr[3] = rd.Next(9999);
dr[4] = i;
dr[5] = "http://dotnet.aspx.cc/Images/meng.gif";
dt.Rows.Add(dr);
}
GridView1.DataSource = dt;
GridView1.DataBind();
TotalPrice.Text = totalCount.ToString();
}
}


decimal totalCount = 0;
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
String n = DataBinder.Eval(e.Row.DataItem, "Num").ToString();
String price = DataBinder.Eval(e.Row.DataItem, "MallPrice").ToString();
int num = 0;
Int32.TryParse(n, out num);
decimal MallPrice = Convert.ToDecimal(price);
totalCount += num * MallPrice;
e.Row.Cells[6].Text = (num * MallPrice).ToString();
}
}

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
Response.Write("执行SQL DELETE ProductCode=" + GridView1.DataKeys[e.RowIndex].Value.ToString());
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<script type="text/javascript">
function jia(ele) {
tr = ele.parentNode;
while (tr.nodeType != 1 || tr.tagName != "TR") tr = tr.parentNode;
num = tr.cells[5].getElementsByTagName("input")[0];
var t = parseInt(num.value, 10);
if (isNaN(t)) num.value = 0;
else num.value = t + 1;
countRow(tr)
}
function jian(ele) {
tr = ele.parentNode;
while (tr.nodeType != 1 || tr.tagName != "TR") tr = tr.parentNode;
num = tr.cells[5].getElementsByTagName("input")[0];
var t = parseInt(num.value, 10);
if (isNaN(t)) num.value = 0;
else {
if (t < 1) return;
num.value = t - 1;
}
countRow(tr)
}
function bian(ele) {
tr = ele.parentNode;
while (tr.nodeType != 1 || tr.tagName != "TR") tr = tr.parentNode;
countRow(tr)
}

function countRow(row) {
price = parseFloat(row.cells[3].innerHTML);
if (isNaN(price)) {
row.cells[6].innerHTML = "0"
return;
}
num = row.cells[5].getElementsByTagName("input")[0];
t = parseInt(num.value, 10);
if (isNaN(t)) t = 0;
row.cells[6].innerHTML = roundPrice(price * t);
CountAll();
}
function CountAll() {
var total = 0;
table = document.getElementById('<%=GridView1.ClientID %>');
if (table.rows.length < 3) return;
for (i = 1; i < table.rows.length; i++) {
p = parseFloat(table.rows[i].cells[6].innerHTML);
if (isNaN(p)) p = 0;
total += p;
}
document.getElementById('<%=TotalPrice.ClientID %>').innerHTML = roundPrice(total);
}

function roundPrice(x) {
return Math.round(x * 100) / 100;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<table>
<tbody>
<tr class="biao"><td>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductCode"
Width="1052px" CssClass="No" OnRowDataBound="GridView1_RowDataBound" OnRowDeleting="GridView1_RowDeleting">
<Columns>
<asp:BoundField DataField="ProductCode" HeaderText="商品编号"></asp:BoundField>
<asp:ImageField DataAlternateTextField="ProImage" DataImageUrlField="ProImage" HeaderText="商品图片">
</asp:ImageField>
<asp:BoundField DataField="ProductName" HeaderText="商品名称" />
<asp:TemplateField HeaderText="价格">
<ItemTemplate>
<%#Eval("MallPrice") %>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Intergral" HeaderText="赠送积分" />
<asp:TemplateField HeaderText="商品数量">
<ItemTemplate>
<a href="#" onclick="jian(this);return false;">-</a>
<input type="text" id="num" value='<%#Eval("Num")%>' onchange="bian(this)" />
<a href="#" onclick="jia(this);return false;">+</a>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="小计">
<ItemTemplate>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField HeaderText="删除次商品" ShowDeleteButton="True">
<ControlStyle BorderWidth="0px" Width="40px" />
</asp:CommandField>
</Columns>
</asp:GridView>
</td></tr>
</tbody>
<tfoot>
<tr><td colspan="6">
<asp:Label ID="Label1" runat="server"></asp:Label>
商品总金额: <span>¥<asp:Label ID="TotalPrice" runat="server"></asp:Label></span>元</td>
</tr>
</table>
</form>
</body>
</html>
dalmeeme 2012-05-14
  • 打赏
  • 举报
回复
js或ajax都行,都可以实现,ajax控件。
sanmi 2012-05-14
  • 打赏
  • 举报
回复
ajax 在前面4个文本框上每个都+上一个方法 判断前面4个是否有正确的值,有则+并且赋值给5
kxloveh 2012-05-11
  • 打赏
  • 举报
回复
这个问题不大,在RowDataBind事件中,用 ((TextBox)e.Row.Cells[0].FindControl("txtPerformance")).Text 分别获得前4列的值,转换为整型,然后加起来,最后再传给第五列的TextBox控件
如果还不会,再问哈!
sqpanda 2012-05-11
  • 打赏
  • 举报
回复
谁来帮帮忙啊?

62,039

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧