|
源代碼:/Files/zhuqil/PivotDataTable.zip
現(xiàn)在,以表格的形式顯示的數(shù)據(jù)是任何應(yīng)用程序的重要組成部分。但有時你需要以數(shù)據(jù)行格式顯示大量的數(shù)據(jù)。如果行數(shù)巨大,它變得非常難以分析。在這種情況下,您可能希望使用其他格式統(tǒng)計你的數(shù)據(jù),如: charts, graphs, groups, pivots等 。本文將介紹一種使用適當?shù)木酆虾瘮?shù)的方式來透視你的數(shù)據(jù),它可以很容易提高您的報表功能。
下面的截圖是在GridView中顯示的數(shù)據(jù)透視功能。(關(guān)于數(shù)據(jù)透視還可以參考:ASP.NET實現(xiàn)類似Excel的數(shù)據(jù)透視表 )
為了簡化方案,我把表的結(jié)果分三個區(qū)域顯示:RowField, DataField
, 和ColumnFields,除了這些,Pivot類提供一些供您來選擇的聚合函數(shù)來綁定的數(shù)據(jù)。可提供的選項有:
Count
: 返回匹配的數(shù)據(jù)數(shù)量Sum
: 返回匹配的數(shù)據(jù)總和(為了得到總和,將DataField的類型必須轉(zhuǎn)換為decimal類型)First
: 返回匹配的數(shù)據(jù)第一項Last
: 返回匹配的數(shù)據(jù)最后一項Average
: 返回匹配的數(shù)據(jù)平均(為了得到平均值,將DataField的類型必須轉(zhuǎn)換為decimal類型)Max
: 返回匹配的數(shù)據(jù)最大值Min
: 返回匹配的數(shù)據(jù)最小值Exists
: 如果有匹配的數(shù)據(jù),返回“true”,否則“false” 代碼主要包含了一個名字為"Pivot
"的類,在它的構(gòu)造函數(shù)中創(chuàng)建DataTable。 ColumnFields
是一個字符串數(shù)組參數(shù),它允許你透視多列數(shù)據(jù)。這個類還包含了一個實際透視你數(shù)據(jù)的PivotData()
方法。

AggregateFunction Aggregate, params string[] ColumnFields)
{
DataTable dt = new DataTable();
string Separator = ".";
var RowList = (from x in _SourceTable.AsEnumerable()
select new { Name = x.Field<object>(RowField) }).Distinct();
var ColList = (from x in _SourceTable.AsEnumerable()
select new { Name = ColumnFields.Select(n => x.Field<object>(n))
.Aggregate((a, b) => a += Separator + b.ToString()) })
.Distinct()
.OrderBy(m => m.Name);
dt.Columns.Add(RowField);
foreach (var col in ColList)
{
dt.Columns.Add(col.Name.ToString());
}
foreach (var RowName in RowList)
{
DataRow row = dt.NewRow();
row[RowField] = RowName.Name.ToString();
foreach (var col in ColList)
{
string strFilter = RowField + " = '" + RowName.Name + "'";
string[] strColValues =
col.Name.ToString().Split(Separator.ToCharArray(),
StringSplitOptions.None);
for (int i = 0; i < ColumnFields.Length; i++)
strFilter += " and " + ColumnFields[i] +
" = '" + strColValues[i] + "'";
row[col.Name.ToString()] = GetData(strFilter, DataField, Aggregate);
}
dt.Rows.Add(row);
}
return dt;
}
NET技術(shù):透視Datatable,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。