转换的关键是要弄清楚Cellset的结构,自己整理了一张图,可以很清晰的看到Cellset内部对象的结构及其含义。
这样下面的代码就很容易理解了。
public DataTable ToDataTable(CellSet cs)
{
DataTable dt = new DataTable();
dt.TableName = "resulttable";
DataColumn dc = new DataColumn();
DataRow dr = null;
//第一列:必有为维度描述(行头)
dt.Columns.Add(new DataColumn("Description"));
//生成数据列对象
string name;
foreach (Position p in cs.Axes[0].Positions)
{
dc = new DataColumn();
name = "";
foreach (Member m in p.Members)
{
name = name + m.Caption + " ";
}
dc.ColumnName = name;
dt.Columns.Add(dc);
}
//添加行数据
int pos = 0;
foreach (Position py in cs.Axes[1].Positions)
{
dr = dt.NewRow();
//维度描述列数据(行头)
name = "";
foreach (Member m in py.Members)
{
name = name + m.Caption + "\r\n";
}
dr[0] = name;
//数据列
for (int x = 1; x <= cs.Axes[0].Positions.Count; x++)
{
dr[x] = cs[pos++].FormattedValue;
}
dt.Rows.Add(dr);
}
return dt;
}
2010-12-01更新
Cellset的枚举很奇怪,如果是[]方式的枚举,则是横向枚举,如果是foreach的枚举,则是纵向枚举。