ASP.NET 的 Gridview 如何做到输入单元格的值,自动计算另外一列的值 可输入的列我转换成 TemplateField,拖了个 TextBox 进去求思路~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用js解决很简单在onblur事件里自动计算即可 完整的例子,拷贝即可运行<%@ Page Language="C#" %><%@ Import Namespace="System.Xml" %><!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) { System.Data.DataTable dt = new System.Data.DataTable(); System.Data.DataRow dr; dt.Columns.Add(new System.Data.DataColumn("学生班级", typeof(System.String))); dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String))); dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal))); for (int i = 0; i < 8; i++) { System.Random rd = new System.Random(Environment.TickCount * i); ; dr = dt.NewRow(); dr[0] = "班级" + i.ToString(); dr[1] = "【孟子E章】" + i.ToString(); dr[2] = System.Math.Round(rd.NextDouble() * 100, 0); dr[3] = System.Math.Round(rd.NextDouble() * 100, 0); dr[4] = System.Math.Round(rd.NextDouble() * 100, 0); dr[5] = System.Math.Round(rd.NextDouble() * 100, 0); dt.Rows.Add(dr); } System.Data.DataView dv = new System.Data.DataView(dt); GridView1.DataSource = dv; GridView1.DataBind(); }</script><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title> <script> function Gen(t) { var tr = t.parentNode; while (tr.tagName != "TR") { tr = tr.parentNode; } if (!tr) { return; } if (tr.tagName != "TR") { return; } if (t.value != "" && !isNaN(parseInt(t.value, 10))) tr.cells[2].getElementsByTagName("span")[0].innerHTML = parseInt(t.value, 10) + parseInt(tr.cells[1].innerHTML) } </script></head><body> <form id="form1" runat="server"> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"> <Columns> <asp:TemplateField><ItemTemplate>输入:<asp:textBox id="t" runat="server" onblur="Gen(this)"></asp:textBox></ItemTemplate></asp:TemplateField> <asp:BoundField DataField="数学" /> <asp:TemplateField> <ItemTemplate>总计:<span></span></ItemTemplate></asp:TemplateField> </Columns> </asp:GridView> </form></body></html> RowDataBound事件中进行计算。当然也可以先计算DataTable dt = YourTable;dt.Column.Add("GetSum");//然后循环赋值this.gridView1.DataSource = dt;this.gridView1.DataBind()//这样做效率不是很高,建议在Sql语句中处理 加入点容错处理<%@ Page Language="C#" %><%@ Import Namespace="System.Xml" %><!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) { System.Data.DataTable dt = new System.Data.DataTable(); System.Data.DataRow dr; dt.Columns.Add(new System.Data.DataColumn("学生班级", typeof(System.String))); dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String))); dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal))); for (int i = 0; i < 8; i++) { System.Random rd = new System.Random(Environment.TickCount * i); ; dr = dt.NewRow(); dr[0] = "班级" + i.ToString(); dr[1] = "【孟子E章】" + i.ToString(); dr[2] = System.Math.Round(rd.NextDouble() * 100, 0); dr[3] = System.Math.Round(rd.NextDouble() * 100, 0); dr[4] = System.Math.Round(rd.NextDouble() * 100, 0); dr[5] = System.Math.Round(rd.NextDouble() * 100, 0); dt.Rows.Add(dr); } System.Data.DataView dv = new System.Data.DataView(dt); GridView1.DataSource = dv; GridView1.DataBind(); }</script><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title> <script> function Gen(t) { var tr = t.parentNode; while (tr.tagName != "TR") { tr = tr.parentNode; } if (!tr) { return; } if (tr.tagName != "TR") { return; } if(isNaN(parseInt(t.value, 10))) t.value = "0"; if (t.value != "" && !isNaN(parseInt(t.value, 10))) { tr.cells[2].getElementsByTagName("span")[0].innerHTML = parseInt(t.value, 10) + parseInt(tr.cells[1].innerHTML) //计算必须是数字,下面这行对输入进行规范化 t.value = parseInt(t.value, 10); } } </script></head><body> <form id="form1" runat="server"> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"> <Columns> <asp:TemplateField HeaderText="输入项目"><ItemTemplate>输入:<asp:textBox id="t" runat="server" onblur="Gen(this)"></asp:textBox></ItemTemplate></asp:TemplateField> <asp:BoundField DataField="数学" HeaderText="数学成绩" /> <asp:TemplateField HeaderText="总计"> <ItemTemplate>总计:<span></span></ItemTemplate></asp:TemplateField> </Columns> </asp:GridView> </form></body></html> function sum() { var table=document.getElementById("Table1"); var tr=table.getElementsByTagName("tr"); var sum=0; var pattem=/^\d+(\.\d+)?$/; for( i=1;i <tr.length;i++) { var sum1; var a,b,c; if(pattem.test(tr[i].getElementsByTagName("td")[4].getElementsByTagName("input")[0].value)) a=parseFloat( tr[i].getElementsByTagName("td")[4].getElementsByTagName("input")[0].value ); else a=0; if(pattem.test(tr[i].getElementsByTagName("td")[5].getElementsByTagName("input")[0].value)) b=parseFloat( tr[i].getElementsByTagName("td")[5].getElementsByTagName("input")[0].value ); else b=0; if(pattem.test(tr[i].getElementsByTagName("td")[7].getElementsByTagName("input")[0].value)) c=parseFloat( tr[i].getElementsByTagName("td")[7].getElementsByTagName("input")[0].value ); else c=0; sum1=a+ b + c; sum=sum+sum1; } document.getElementById("txt").value=parseFloat(sum).toFixed(2); } <script type="text/javascript"> function checkFloat(e) { return (e.keyCode >= 48 && e.keyCode <= 57) || e.keyCode == 8 || e.keyCode == 46 || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 190 || e.keyCode == 110 ? true : false; } function Cal(tb) { var b = parseFloat(tb.value); var par = tb.parentElement || tb.parentNode; var a = parseFloat(par.previousSibling.getElementsByTagName("span")[0].innerHTML); var tbC = par.nextSibling.getElementsByTagName("input")[0]; tbC.value = a * b; } </script> <asp:TemplateField HeaderText="数量"> <EditItemTemplate> <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("[T-jpcs1]") %>'></asp:TextBox> </EditItemTemplate> <ItemTemplate> <asp:Label ID="a" runat="server" Text='<%# Bind("[T-jpcs1]") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="单价"> <EditItemTemplate> <asp:TextBox ID="TextBox8" runat="server"></asp:TextBox> </EditItemTemplate> <ItemTemplate> <asp:TextBox ID="b" runat="server" Width="100px" onkeydown="return checkFloat(event)" onkeyup='Cal(this)' ></asp:TextBox> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="总金额"> <EditItemTemplate> <asp:TextBox ID="TextBox10" runat="server"></asp:TextBox> </EditItemTemplate> <ItemTemplate> <asp:TextBox ID="c" runat="server" Width="100px" onkeydown="return checkFloat(event)"></asp:TextBox> </ItemTemplate> </asp:TemplateField> 我添加了采购订单,库存数量那里不是增加而是减少,该怎么改 如何在另一个工程中引用这个AutoUpdate更新程序! 大家好,我想问tableAdapter与sqlDataAdapter有什么区别 UserControl中的问题?谢谢帮忙!!! C++写的DLL,C#调用,会不会出现名字改编问题?如何解决? 使用TextWriter写UTF编码文件时,怎样能不写BOM头? 急求用C#获取本机的所有用户帐户 关于DATAROW 请教问题,甩分,来者有分;WAV格式转换为PCM格式 关于发送邮件的问题?急 子窗体调用openfiledialog出错.未知原因 .net 操作Excel的问题
在onblur事件里自动计算即可
<%@ Page Language="C#" %><%@ Import Namespace="System.Xml" %>
<!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)
{ System.Data.DataTable dt = new System.Data.DataTable();
System.Data.DataRow dr;
dt.Columns.Add(new System.Data.DataColumn("学生班级", typeof(System.String)));
dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String)));
dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal))); for (int i = 0; i < 8; i++)
{
System.Random rd = new System.Random(Environment.TickCount * i); ;
dr = dt.NewRow();
dr[0] = "班级" + i.ToString();
dr[1] = "【孟子E章】" + i.ToString();
dr[2] = System.Math.Round(rd.NextDouble() * 100, 0);
dr[3] = System.Math.Round(rd.NextDouble() * 100, 0);
dr[4] = System.Math.Round(rd.NextDouble() * 100, 0);
dr[5] = System.Math.Round(rd.NextDouble() * 100, 0);
dt.Rows.Add(dr);
}
System.Data.DataView dv = new System.Data.DataView(dt);
GridView1.DataSource = dv;
GridView1.DataBind();
}
</script><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script> function Gen(t) {
var tr = t.parentNode;
while (tr.tagName != "TR") {
tr = tr.parentNode;
}
if (!tr) {
return;
}
if (tr.tagName != "TR") {
return;
}
if (t.value != "" && !isNaN(parseInt(t.value, 10)))
tr.cells[2].getElementsByTagName("span")[0].innerHTML = parseInt(t.value, 10) + parseInt(tr.cells[1].innerHTML)
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField><ItemTemplate>输入:<asp:textBox id="t" runat="server" onblur="Gen(this)"></asp:textBox></ItemTemplate></asp:TemplateField>
<asp:BoundField DataField="数学" />
<asp:TemplateField>
<ItemTemplate>总计:<span></span></ItemTemplate></asp:TemplateField>
</Columns>
</asp:GridView>
</form>
</body>
</html>
DataTable dt = YourTable;
dt.Column.Add("GetSum");
//然后循环赋值this.gridView1.DataSource = dt;
this.gridView1.DataBind()//这样做效率不是很高,建议在Sql语句中处理
<%@ Page Language="C#" %><%@ Import Namespace="System.Xml" %>
<!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)
{ System.Data.DataTable dt = new System.Data.DataTable();
System.Data.DataRow dr;
dt.Columns.Add(new System.Data.DataColumn("学生班级", typeof(System.String)));
dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String)));
dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal))); for (int i = 0; i < 8; i++)
{
System.Random rd = new System.Random(Environment.TickCount * i); ;
dr = dt.NewRow();
dr[0] = "班级" + i.ToString();
dr[1] = "【孟子E章】" + i.ToString();
dr[2] = System.Math.Round(rd.NextDouble() * 100, 0);
dr[3] = System.Math.Round(rd.NextDouble() * 100, 0);
dr[4] = System.Math.Round(rd.NextDouble() * 100, 0);
dr[5] = System.Math.Round(rd.NextDouble() * 100, 0);
dt.Rows.Add(dr);
}
System.Data.DataView dv = new System.Data.DataView(dt);
GridView1.DataSource = dv;
GridView1.DataBind();
}
</script><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script> function Gen(t) {
var tr = t.parentNode;
while (tr.tagName != "TR") {
tr = tr.parentNode;
}
if (!tr) {
return;
}
if (tr.tagName != "TR") {
return;
}
if(isNaN(parseInt(t.value, 10))) t.value = "0";
if (t.value != "" && !isNaN(parseInt(t.value, 10))) {
tr.cells[2].getElementsByTagName("span")[0].innerHTML = parseInt(t.value, 10) + parseInt(tr.cells[1].innerHTML)
//计算必须是数字,下面这行对输入进行规范化
t.value = parseInt(t.value, 10);
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField HeaderText="输入项目"><ItemTemplate>输入:<asp:textBox id="t" runat="server" onblur="Gen(this)"></asp:textBox></ItemTemplate></asp:TemplateField>
<asp:BoundField DataField="数学" HeaderText="数学成绩" />
<asp:TemplateField HeaderText="总计">
<ItemTemplate>总计:<span></span></ItemTemplate></asp:TemplateField>
</Columns>
</asp:GridView>
</form>
</body>
</html>
{
var table=document.getElementById("Table1");
var tr=table.getElementsByTagName("tr");
var sum=0;
var pattem=/^\d+(\.\d+)?$/;
for( i=1;i <tr.length;i++)
{
var sum1;
var a,b,c;
if(pattem.test(tr[i].getElementsByTagName("td")[4].getElementsByTagName("input")[0].value))
a=parseFloat( tr[i].getElementsByTagName("td")[4].getElementsByTagName("input")[0].value );
else
a=0;
if(pattem.test(tr[i].getElementsByTagName("td")[5].getElementsByTagName("input")[0].value))
b=parseFloat( tr[i].getElementsByTagName("td")[5].getElementsByTagName("input")[0].value );
else
b=0;
if(pattem.test(tr[i].getElementsByTagName("td")[7].getElementsByTagName("input")[0].value))
c=parseFloat( tr[i].getElementsByTagName("td")[7].getElementsByTagName("input")[0].value );
else
c=0;
sum1=a+ b + c;
sum=sum+sum1;
}
document.getElementById("txt").value=parseFloat(sum).toFixed(2);
}
<script type="text/javascript">
function checkFloat(e) {
return (e.keyCode >= 48 && e.keyCode <= 57) || e.keyCode == 8 || e.keyCode == 46 || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 190 || e.keyCode == 110 ? true : false;
} function Cal(tb) {
var b = parseFloat(tb.value);
var par = tb.parentElement || tb.parentNode;
var a = parseFloat(par.previousSibling.getElementsByTagName("span")[0].innerHTML);
var tbC = par.nextSibling.getElementsByTagName("input")[0];
tbC.value = a * b;
}
</script>
<asp:TemplateField HeaderText="数量">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("[T-jpcs1]") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="a" runat="server" Text='<%# Bind("[T-jpcs1]") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="单价">
<EditItemTemplate>
<asp:TextBox ID="TextBox8" runat="server"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:TextBox ID="b" runat="server" Width="100px" onkeydown="return checkFloat(event)" onkeyup='Cal(this)' ></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="总金额">
<EditItemTemplate>
<asp:TextBox ID="TextBox10" runat="server"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:TextBox ID="c" runat="server" Width="100px" onkeydown="return checkFloat(event)"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>