请教gridview 跨行计算?

quchao 2006-09-16 08:59:19
各位大虾好:
帮忙解决一下吧,我想在gridview 里实现跨行计算,应该怎么实现?
想实现的结果如下:

数量 单价 合计 付款 余额
200 5.00 1000.00 200.00 800.00
150 3.00 450.00 100.00 1150.00
100 2 200.00 0 1350.00
依次类推.
就是上次的余额+当前合计-付款=当前余额
好几天了,请大家帮忙解决,谢谢了!
...全文
319 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
kbxj406 2006-09-16
  • 打赏
  • 举报
回复
MSN上面不是写过了,“向上看”
quchao 2006-09-16
  • 打赏
  • 举报
回复
有QQ吗?msn也行啊
kbxj406 2006-09-16
  • 打赏
  • 举报
回复
聊聊历史啊

原来打传奇,和一群哥们的口头禅啦
quchao 2006-09-16
  • 打赏
  • 举报
回复
kbxj406 "娃哈哈" 什么意思?打广告,还是??????呵呵呵呵!
kbxj406 2006-09-16
  • 打赏
  • 举报
回复
娃哈哈
quchao 2006-09-16
  • 打赏
  • 举报
回复
在此特别感谢孟子E章,kbxj406(羽儿),还有ustbwuyi,dyjqk,wshuangminlg,再次感谢,给个机会到烟台请吃海鲜。真的。
quchao 2006-09-16
  • 打赏
  • 举报
回复
ok,very good!!!!!!!!!!!!!!!!!
各位,十分感谢,问题解决了,谢谢啊,!!!!!!!!!!
quchao 2006-09-16
  • 打赏
  • 举报
回复
我换到
我的机器了,一会给分

kbxj406 2006-09-16
  • 打赏
  • 举报
回复
我的思路,主要代码如下:

DataSet ds = new DataSet();
ds=GetData();//从数据库中获得数据

if(ds.Tables[0].Columns.Contains("余额"))
{
ds.Tables[0].Columns.Remove("余额");
}
ds.Tables[0].Columns.Add(new DataColumn("余额",typeof(Decimal),null,MappingType.Element));//向表中加一列

Decimal left=0;
foreach(DataRow row in ds.Tables[0].Rows)//给新加列赋值
{
Decimal leftcount = Convert.ToDecimal(row["数量"]) * Convert.ToDecimal(row["单价"]) - Convert.ToDecimal(d["付款"])+left;
row["余额"]=leftcount;
left=leftcount;
}
datagrid1.DataSource=ds;//绑定
datagrid1.DataMember=ds.Tables[0].TableName;
datagrid1.DataBind();

在可视化中把余额列的数据库字段设置"余额"就可以了。
孟子E章 2006-09-16
  • 打赏
  • 举报
回复
完整版本

<%@ Page Language="C#" AutoEventWireup="true" debug="true"%>

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

<script runat="server">
ICollection CreateDataSource()
{
System.Data.DataTable dt = new System.Data.DataTable();
System.Data.DataRow dr;
dt.Columns.Add(new System.Data.DataColumn("数量", typeof(System.Int32)));
dt.Columns.Add(new System.Data.DataColumn("单价", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("付款", typeof(System.Decimal)));

dr = dt.NewRow();
dr[0] = 200;
dr[1] = 5.00;
dr[2] = 200.00;
dt.Rows.Add(dr);

dr = dt.NewRow();
dr[0] = 150;
dr[1] = 3.00;
dr[2] = 100.00;
dt.Rows.Add(dr);

dr = dt.NewRow();
dr[0] = 100;
dr[1] = 2.00;
dr[2] = 0.00;
dt.Rows.Add(dr);
System.Data.DataView dv = new System.Data.DataView(dt);
return dv;
}

Decimal aa = 0;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView1.BorderWidth = Unit.Pixel(2);
GridView1.BorderColor = System.Drawing.Color.DarkOrange;
GridView1.DataSource = CreateDataSource();
GridView1.DataBind();
}
}


protected void GridView1_RowDataBound1(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Literal l = (Literal)e.Row.FindControl("mxh");
Literal leftCount = (Literal)e.Row.FindControl("leftCount");
Decimal c = 0;
Decimal b;
System.Data.DataRowView d = (System.Data.DataRowView)e.Row.DataItem;
System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo();
provider.NumberDecimalDigits = 2;
if (e.Row.DataItemIndex == 0)
{
aa = Convert.ToDecimal(d["数量"]) * Convert.ToDecimal(d["单价"]) - Convert.ToDecimal(d["付款"]);
b = Convert.ToDecimal(d["数量"]) * Convert.ToDecimal(d["单价"]);
l.Text = b.ToString("##0.00");
leftCount.Text = aa.ToString("##0.00");
}
else
{
b = Convert.ToDecimal(d["数量"]) * Convert.ToDecimal(d["单价"]);
l.Text = b.ToString("##0.00");
aa = b + aa - Convert.ToDecimal(d["付款"]);
leftCount.Text = aa.ToString("##0.00");
}
}
}

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"
OnRowDataBound="GridView1_RowDataBound1" ShowHeader="true">
<Columns>
<asp:BoundField DataField="数量" HeaderText="数量" HtmlEncode="false"/>
<asp:BoundField DataField="单价" HeaderText="单价" DataFormatString="{0:##0.00}" HtmlEncode="false"/>
<asp:TemplateField HeaderText="合计">
<ItemTemplate>
<asp:Literal ID="mxh" runat="server"></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="付款" HeaderText="付款" DataFormatString="{0:##0.00}" HtmlEncode="false"/>
<asp:TemplateField HeaderText="余额" >
<ItemTemplate>
<asp:Literal ID="leftCount" runat="server"></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</form>
</body>
</html>
孟子E章 2006-09-16
  • 打赏
  • 举报
回复
<%@ Page Language="C#" AutoEventWireup="true" debug="true"%>

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

<script runat="server">
ICollection CreateDataSource()
{
System.Data.DataTable dt = new System.Data.DataTable();
System.Data.DataRow dr;
dt.Columns.Add(new System.Data.DataColumn("数量", typeof(System.Int32)));
dt.Columns.Add(new System.Data.DataColumn("单价", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("付款", typeof(System.Decimal)));

dr = dt.NewRow();
dr[0] = 200;
dr[1] = 5.00;
dr[2] = 200.00;
dt.Rows.Add(dr);

dr = dt.NewRow();
dr[0] = 150;
dr[1] = 3.00;
dr[2] = 100.00;
dt.Rows.Add(dr);

dr = dt.NewRow();
dr[0] = 100;
dr[1] = 2.00;
dr[2] = 0.00;
dt.Rows.Add(dr);
System.Data.DataView dv = new System.Data.DataView(dt);
return dv;
}

Decimal aa = 0;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView1.BorderWidth = Unit.Pixel(2);
GridView1.BorderColor = System.Drawing.Color.DarkOrange;
GridView1.DataSource = CreateDataSource();
GridView1.DataBind();
}
}


protected void GridView1_RowDataBound1(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Literal l = (Literal)e.Row.FindControl("mxh");
Literal leftCount = (Literal)e.Row.FindControl("leftCount");
Decimal c = 0;
Decimal b;
System.Data.DataRowView d = (System.Data.DataRowView)e.Row.DataItem;
System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo();
provider.NumberDecimalDigits = 2;
if (e.Row.DataItemIndex == 0)
{
aa = Convert.ToDecimal(d["数量"]) * Convert.ToDecimal(d["单价"]) - Convert.ToDecimal(d["付款"]);
b = Convert.ToDecimal(d["数量"]) * Convert.ToDecimal(d["单价"]);
l.Text = Convert.ToString(b, provider);
leftCount.Text = Convert.ToString(aa, provider);
}
else
{
b = Convert.ToDecimal(d["数量"]) * Convert.ToDecimal(d["单价"]);
l.Text = Convert.ToString(b, provider);
aa = b + aa - Convert.ToDecimal(d["付款"]);
leftCount.Text = Convert.ToString(aa, provider);
}
}
}

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"
OnRowDataBound="GridView1_RowDataBound1" ShowHeader="true">
<Columns>
<asp:BoundField DataField="数量" HeaderText="数量" HtmlEncode="false"/>
<asp:BoundField DataField="单价" HeaderText="单价" DataFormatString="{0:###.00}" HtmlEncode="false"/>
<asp:TemplateField HeaderText="合计">
<ItemTemplate>
<asp:Literal ID="mxh" runat="server"></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="付款" HeaderText="付款" DataFormatString="{0:###.00}" HtmlEncode="false"/>
<asp:TemplateField HeaderText="余额" >
<ItemTemplate>
<asp:Literal ID="leftCount" runat="server"></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</form>
</body>
</html>
quchao 2006-09-16
  • 打赏
  • 举报
回复
高兴..........................................................!
quchao 2006-09-16
  • 打赏
  • 举报
回复
厉害,net_lover,我这就试一下,谢谢你了,没想到你能回答我的问题,我买过你的书<asp.net 2.0>
kbxj406 2006-09-16
  • 打赏
  • 举报
回复
哈哈,
刚刚在写代码

孟子老大,给代码了,那我就先不写代码了,思路虽然有点不一样。

lz,如果需要的话,我再写,贴出来。


kbxj406 2006-09-16
  • 打赏
  • 举报
回复
MSN:kbxj406@hotmail.com
孟子E章 2006-09-16
  • 打赏
  • 举报
回复
拷贝即可运行,
和数据库的连接,改成数据库的方法即可
孟子E章 2006-09-16
  • 打赏
  • 举报
回复
<%@ 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">
ICollection CreateDataSource( )
{
System.Data.DataTable dt = new System.Data.DataTable();
System.Data.DataRow dr;
dt.Columns.Add(new System.Data.DataColumn("数量", typeof(System.Int32)));
dt.Columns.Add(new System.Data.DataColumn("单价", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("付款", typeof(System.Decimal)));

dr = dt.NewRow();
dr[0] = 200;
dr[1] = 5.00;
dr[2] = 200.00;
dt.Rows.Add(dr);

dr = dt.NewRow();
dr[0] = 150;
dr[1] = 3.00;
dr[2] = 100.00;
dt.Rows.Add(dr);

dr = dt.NewRow();
dr[0] = 100;
dr[1] = 2;
dr[2] = 0;
dt.Rows.Add(dr);
System.Data.DataView dv = new System.Data.DataView(dt);
return dv;
}

Decimal aa = 0;
protected void Page_Load( object sender, EventArgs e )
{
if (!IsPostBack)
{
GridView1.BorderWidth = Unit.Pixel(2);
GridView1.BorderColor = System.Drawing.Color.DarkOrange;
GridView1.DataSource = CreateDataSource();
GridView1.DataBind();
}
}


protected void GridView1_RowDataBound1(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{

Literal l = (Literal)e.Row.FindControl("mxh");
Literal leftCount = (Literal)e.Row.FindControl("leftCount");
Decimal c = 0;
Decimal b;
System.Data.DataRowView d = (System.Data.DataRowView)e.Row.DataItem;
System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo();
provider.NumberDecimalDigits = 2;
provider.NumberGroupSeparator = ".";
if (e.Row.DataItemIndex == 0)
{
aa = Convert.ToDecimal(d["数量"]) * Convert.ToDecimal(d["单价"]) - Convert.ToDecimal(d["付款"]);
b = Convert.ToDecimal(d["数量"]) * Convert.ToDecimal(d["单价"]);
l.Text = Convert.ToString(b, provider);
leftCount.Text = Convert.ToString(aa, provider);
}
else
{

b = Convert.ToDecimal(d["数量"]) * Convert.ToDecimal(d["单价"]);
l.Text = Convert.ToString(b, provider);
aa = b + aa - Convert.ToDecimal(d["付款"]);

leftCount.Text = Convert.ToString(aa, provider);
}


}
}

</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="GridView1_RowDataBound1" ShowHeader="true">
<Columns>
<asp:BoundField DataField="数量" HeaderText="数量"/>
<asp:BoundField DataField="单价" HeaderText="单价"/>
<asp:TemplateField HeaderText="合计">
<ItemTemplate>
<asp:Literal ID="mxh" runat="server"></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="付款" HeaderText="付款" />
<asp:TemplateField HeaderText="余额">
<ItemTemplate>
<asp:Literal ID="leftCount" runat="server"></asp:Literal>

</ItemTemplate>
</asp:TemplateField>
</Columns>


</asp:GridView>
</form>
</body>
</html>
quchao 2006-09-16
  • 打赏
  • 举报
回复
kbjx406 可以给个联系方式吗?
孟子E章 2006-09-16
  • 打赏
  • 举报
回复
完全可以的,你再格式化显示即可

<%@ 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">
ICollection CreateDataSource( )
{
System.Data.DataTable dt = new System.Data.DataTable();
System.Data.DataRow dr;
dt.Columns.Add(new System.Data.DataColumn("数量", typeof(System.Int32)));
dt.Columns.Add(new System.Data.DataColumn("单价", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("付款", typeof(System.Decimal)));

dr = dt.NewRow();
dr[0] = 200;
dr[1] = 5.00;
dr[2] = 200.00;
dt.Rows.Add(dr);

dr = dt.NewRow();
dr[0] = 150;
dr[1] = 3.00;
dr[2] = 100.00;
dt.Rows.Add(dr);

dr = dt.NewRow();
dr[0] = 100;
dr[1] = 2;
dr[2] = 0;
dt.Rows.Add(dr);
System.Data.DataView dv = new System.Data.DataView(dt);
return dv;
}

Decimal aa = 0;
protected void Page_Load( object sender, EventArgs e )
{
if (!IsPostBack)
{
GridView1.BorderWidth = Unit.Pixel(2);
GridView1.BorderColor = System.Drawing.Color.DarkOrange;
GridView1.DataSource = CreateDataSource();
GridView1.DataBind();
}
}


protected void GridView1_RowDataBound1(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{

Literal l = (Literal)e.Row.FindControl("mxh");
Literal leftCount = (Literal)e.Row.FindControl("leftCount");
Decimal c = 0;
Decimal b;
System.Data.DataRowView d = (System.Data.DataRowView)e.Row.DataItem;
System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo();
provider.NumberDecimalDigits = 2;
provider.NumberGroupSeparator = ".";
if (e.Row.DataItemIndex == 0)
{
aa = Convert.ToDecimal(d["数量"]) * Convert.ToDecimal(d["单价"]) - Convert.ToDecimal(d["付款"]);

leftCount.Text = Convert.ToString(aa, provider);
}
else
{

b = Convert.ToDecimal(d["数量"]) * Convert.ToDecimal(d["单价"]);
l.Text = Convert.ToString(b, provider);
aa = b + aa - Convert.ToDecimal(d["付款"]);

leftCount.Text = Convert.ToString(aa, provider);
}


}
}

</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="GridView1_RowDataBound1">
<Columns>
<asp:BoundField DataField="数量" />
<asp:BoundField DataField="单价" />
<asp:TemplateField>
<ItemTemplate>
<asp:Literal ID="mxh" runat="server"></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="付款" />
<asp:TemplateField>
<ItemTemplate>
<asp:Literal ID="leftCount" runat="server"></asp:Literal>

</ItemTemplate>
</asp:TemplateField>
</Columns>


</asp:GridView>
</form>
</body>
</html>
quchao 2006-09-16
  • 打赏
  • 举报
回复
有啊,合计是sql自动计算的.
加载更多回复(8)

62,074

社区成员

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

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

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

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