【问题标题】:ASP.NET ListView - total value (sum) for a columnASP.NET ListView - 列的总值(总和)
【发布时间】:2012-03-20 09:57:28
【问题描述】:
我正在编写一个可重用的控件——我们称之为 MyListView——继承自标准 ASP.NET ListView 控件。它的数据源始终设置为 LinqDataSource,我需要计算特定列的总值(该列所有值的总和)。哪种方法最适合计算总值?我正在考虑 OnItemDataBound 事件并使用全局变量计算总计,但我还需要在 MyListView 中分页(使用标准 Pager 控件),并且此事件仅针对当前可见页面上的行触发,而不是针对数据源中的所有行。我也不想在 ASPX 页面后面的代码中计算总和,我只想在 aspx 中指定一个列名,MyListView 会自动计算该列的总值。
感谢您的帮助!
【问题讨论】:
标签:
asp.net
listview
user-controls
【解决方案1】:
如果您使用的是分页,那么获得这样的结果并不容易。我认为您应该考虑将用于总计的行放在 ListView 之外(这样您也可以使用 LINQ 来计算总计,我想您不想枚举所有项目来计算总计可以在 SQL 端快速完成)。
【解决方案2】:
Dim total As Integer
For Each Items As ListViewItem In lV_allItems.Items
Dim lbl As Label = CType(Items.FindControl("Quantitytxtbox"), Label)
total += lbl.Text
Next
Label1.Text = "TOTAL FRAME ADDED : " + total.ToString
我将此代码放在页面预渲染中,它工作得很好,你必须确保列中的内容是整数,否则你需要转换。
【解决方案3】:
如果您想从数据库中获取总值,我的建议是将输出参数与您的 query / linkq 一起传递给数据库,并在您获取数据的同一调用中从数据库中获取所有记录的总和。
【解决方案4】:
假设你使用这个查询来绑定你的列表视图
var queryforBind= (from c in table).Skip(1).Take(10); //1 and 10 can be changed according to your requirement
绑定您的列表视图后,调用此查询来计算总数。
var sum = queryforBind.Sum(x => x => x.Field); //Field can be according your requirement