各位大虾好:
帮忙解决一下吧,我想在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
依次类推.
就是上次的余额+当前合计-付款=当前余额
好几天了,请大家帮忙解决,谢谢了!
帮忙解决一下吧,我想在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
依次类推.
就是上次的余额+当前合计-付款=当前余额
好几天了,请大家帮忙解决,谢谢了!
你直接在SQL语句里面计算好,然后把上面的图生成一个视图,
然后再在gridview显示不就可以了么??
对表先加一列“余额”,然后对表中每一个行循环,用你的“上次的余额+当前合计-付款=当前余额”公式给你的“余额”赋值,然后绑定即可。
感觉用sql实现需要用游标来实现吧。
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>
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>
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>
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>
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();在可视化中把余额列的数据库字段设置"余额"就可以了。
各位,十分感谢,问题解决了,谢谢啊,!!!!!!!!!!