在DataTable中对列进行求和而不重建它

时间:2014-06-03 19:51:54

标签: c# asp.net gridview datatable

我有一个DataTable,我绑定到网站上的gridview。该表包含数月的数据列。我希望用户能够以各种方式更新gridview,例如每12个月(列)数据汇总。我之前通过foreach循环完成此操作并将每行的这些列相加并将其添加到具有不同列的表中,

foreach (DataRow dr in data.Rows)
{
    newRow[6] = Convert.ToDouble(dr[6]) + Convert.ToDouble(dr[7]) + Convert.ToDouble(dr[8]);

    et cetera 

    newDataTable.Rows.Add(newRow);
}

但我觉得这需要一段时间才能运行。

有更有效的方法吗?因为我将表中的月份数据存储在会话变量中。我可以轻松地将其传递给一个会压缩它的方法,而不必创建新的数据表并逐行重建它吗?我正在考虑使用DataTable.Select的方法,但不是返回DataRow []我需要一个DataColumn []来总结?我不完全确定。

也许没有其他方式,但我想知道是否有人有任何更好的方法。 谢谢,

1 个答案:

答案 0 :(得分:0)

使用会话变量来包含大数据不是一个好方法,因为这个值存储为隐藏变量,这可能在资源方面成本很高。有关详细信息,请参阅此链接 Assigning DataTable to ViewState is a good way?

并且为什么不从数据源获得总和?

var gridView = sender as GridView;
var dataSource = gridView.DataSource as IEnumerable<YourDataObject>;
e.Row.Cells[3].Text = dataSource.Sum(item => item.YourProperty).ToString();