首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

对DataTable开展动态的行转列处理

2013-03-22 
对DataTable进行动态的行转列处理需要分列的项和需要统计的项都是不定的,层次也是不定的首先获取一个DataT

对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 在每种条件下通过循环来手动添加
          比如:可以通过查询数据库满足条件的条目、循环来添加表格行数
                 通过手动添加列数

热点排行