这是我的gridview设计。
<asp:GridView ID="GridView1" runat="server" HorizontalAlign="Center" CellPadding="3"
GridLines="Both" ShowFooter="True" CssClass="contentfont">
<RowStyle Wrap="False" />
<HeaderStyle Wrap="False" Height="25px" />
<FooterStyle Forecolor="Black" BackColor="LightGray" />
</asp:GridView>
从DB绑定列后,此grdiview有大约8列。现在,我需要将某些列的总值相加并使用标签将其显示在列的正下方。如果需要添加,删除,编辑和更新功能,我可以添加带标签的footerrow。由于gridview是只读的,不需要更新,我很困惑如何实现这一点。
查询:
我正在使用此查询来绑定网格。我需要在我的选择查询中对除前两个之外的所有列进行求和。
command.CommandText = "select AppName, Year, RevisedValue, SalesProfit, Variance, MonthlyProfit, QuarterProfit, YearlyProfit from Reports
任何人都可以帮我解决这个问题。
答案 0 :(得分:1)
您没有指定存储数据的方式,因此我将使用数据表,在我的示例中将称为DTable。
将以下颂歌添加到您的标记中:
<asp:GridView ID="GridView1" /* .... */ OnRowDataBound="GridView1_RowDataBound">
</asp:GridView>
编辑从这里我编辑了帖子,用我在示例项目中测试的代码进行更改。我使用AdventureWorks数据库来获取一些示例数据。为了快速实现,我使用Linq-to-Entites获取数据并将其绑定到GridView。
在此之后,我使用上面提到的OnRowDataBound="GridView1_RowDataBound
来计算页脚值。
void Page_Load(Object sender, EventArgs e)
{
if (!IsPostBack)
{
using (var context = new AdventureWorks2008R2Entities())
{
var result = context.Products.Where(p => p.ListPrice != 0)
.Select(x => new
{
Name = x.Name,
ListPrice = x.ListPrice,
StandardCost = x.StandardCost
})
.Take(5);
GridView1.DataSource = result.ToList();
GridView1.DataBind();
}
}
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
using (var context = new AdventureWorks2008R2Entities())
{
var result = context.Products.Where(p => p.ListPrice != 0)
.Select(x => new
{
Name = x.Name,
ListPrice = x.ListPrice,
StandardCost = x.StandardCost
})
.Take(5);
if (e.Row.RowType == DataControlRowType.Footer)
{
e.Row.Cells[1].Text = result.ToList().Sum(x => x.ListPrice).ToString();
e.Row.Cells[2].Text = result.ToList().Sum(x => x.StandardCost).ToString();
}
}
}
输出:
*注意:*此代码远非最佳,因为我两次查询数据库。请不要在生产代码中使用它。获取数据,将其存储在数据库中然后计算内存中所需字段的Sum()可能更好。