对DataTable进行动态的行转列处理
需要分列的项和需要统计的项都是不定的,层次也是不定的
首先获取一个DataTable,然后对DataTable的数据进行处理。
例如:
原结构:姓名 性别 课目 成绩 期中/期末
成绩
目标结构1:姓名 性别 期中 期末
语 数 英 语 数 英
成绩
目标结构2:姓名 性别 语 数 英
期中 期末 期中 期末 期中 期末
成绩
目标结构3:姓名 性别 期中/期末 语 数 英
...
当然还可能有其他形式的结构,比如有多个统计字段等等,有没有做过的高手指点下 DataTable 行转列
[解决办法]
相对来说比较简单,只能给你参考代码。
/// <summary>
/// 将DataTable行列转换
/// </summary>
/// <param name="src">要转换的DataTable</param>
/// <param name="columnHead">要作为Column的哪列</param>
/// <returns></returns>
public static DataTable Col2Row(DataTable src, int columnHead)
{
DataTable result = new DataTable();
DataColumn myHead = src.Columns[columnHead];
result.Columns.Add(myHead.ColumnName);
for (int i = 0; i < src.Rows.Count; i++)
{
result.Columns.Add(src.Rows[i][myHead].ToString());
}
//
foreach (DataColumn col in src.Columns)
{
if (col == myHead)
continue;
object[] newRow = new object[src.Rows.Count + 1];
newRow[0] = col.ColumnName;
for (int i = 0; i < src.Rows.Count; i++)
{
newRow[i + 1] = src.Rows[i][col];
}
result.Rows.Add(newRow);
}
return result;
}
public static DataTable Col2Row(DataTable src, string columnHead)
{
for (int i = 0; i < src.Columns.Count; i++)
{
if (src.Columns[i].ColumnName.ToUpper () == columnHead.ToUpper())
return Col2Row(src, i);
}
return new DataTable();
}
[解决办法]
用linq
http://bbs.csdn.net/topics/370024120
[解决办法]
目测你的这个行列转换应该是满足不了LZ的需求
不过可以尝试下html拼接的方法,这样比较自由 方法
可以参考下这个
http://bbs.csdn.net/topics/390385076#post-393851799http://bbs.csdn.net/topics/390385076#post-393851799
[解决办法]
既然 DataTable 都出来了,直接循环拼接 HTML 不就好了。。。LS 说的方法个人经常用。。
[解决办法]
1设置一个变量来区分你的不同制表要求
2 判断变量值
3 在每种条件下通过循环来手动添加
比如:可以通过查询数据库满足条件的条目、循环来添加表格行数
通过手动添加列数