加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C# 行转列 (两种)

(2013-03-02 16:12:33)
标签:

行转列

c

分类: C#
private void RowsToColsTest()
        {
            //声明定义行数据表
            DataTable _rowsDt = new DataTable();
            _rowsDt.Columns.Add("name");    //名称
            _rowsDt.Columns.Add("type");    //类型
            _rowsDt.Columns.Add("formula");    //公式

            //定义行信息数据表
            DataRow _dr = _rowsDt.NewRow();

            //字段数据
            _dr["name"] = "ZGXM";
            _dr["type"] = "jb";
            _dr["formula"] = "";
            //添加数据
            _rowsDt.Rows.Add(_dr);

            _dr = _rowsDt.NewRow();
            //字段数据
            _dr["name"] = "JBGZ";
            _dr["type"] = "jb";
            _dr["formula"] = "";
            //添加数据
            _rowsDt.Rows.Add(_dr);

            _dr = _rowsDt.NewRow();
            //字段数据
            _dr["name"] = "XJGZ";
            _dr["type"] = "jb";
            _dr["formula"] = "";
            //添加数据
            _rowsDt.Rows.Add(_dr);

            _dr = _rowsDt.NewRow();
            //字段数据
            _dr["name"] = "BFZS";
            _dr["type"] = "gs";
            _dr["formula"] = "(JBGZ+XJGZ)*0.1";
            //添加数据
            _rowsDt.Rows.Add(_dr);

            DisplayTable(_rowsDt);

            DataTable _colsDt = new DataTable();

            //设置列
            foreach (DataRow _rows in _rowsDt.Rows)
            {
                _colsDt.Columns.Add(_rows["name"].ToString());
            }

            //设置值
            for (int i = 0; i < 4; i++)
            {
                string _tGuid = Guid.NewGuid().ToString().Substring(0, 4);
                DataRow _temp1Dr = _colsDt.NewRow();
                for (int y = 0; y < _colsDt.Columns.Count; y++)
                {
                    if (_colsDt.Columns[y].ColumnName == "ZGXM")
                    {
                        _temp1Dr[y] = _tGuid;
                    }
                    else
                    {
                        _temp1Dr[y] = i + 1;
                    }
                }
                _colsDt.Rows.Add(_temp1Dr);
            }
            DataRow _temp2Dr = _colsDt.NewRow();
            _temp2Dr["ZGXM"] = "张三";
            _colsDt.Rows.Add(_temp2Dr);

            Console.WriteLine("\n\n行转列后=====>\n\n");
            DisplayTable(_colsDt);


            Console.ReadLine();
        }




        public void WebMain()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("name");
            dt.Columns.Add("type");
            dt.Columns.Add("relt");

            for (int i = 0; i < 4; i++)
            {
                DataRow dr = dt.NewRow();
                dr["name"] = "name" + i;
                dr["type"] = "type" + i;
                dr["relt"] = "relt" + i;

                dt.Rows.Add(dr);
            }
            //DataRow dr1 = dt.NewRow();
            //dr1["name"] = "name5";
            //dr1["type"] = "type5";
            //dr1["relt"] = "relt5";
            //dt.Rows.Add(dr1);

            DisplayTable(dt);

            Console.WriteLine("\r\n =====> 进行行列转换 \r\n");

            DisplayTable(ColumnToRow(dt, 0));

            Console.ReadLine();
        }

        public DataTable ColumnToRow(DataTable src_dt, int columnIndex) //columnIndex 用来当作新列名的列
        {
            DataTable dt = new DataTable();
            dt.Columns.Add(src_dt.Columns[columnIndex].ColumnName);

            foreach (DataRow dr in src_dt.Rows)
                dt.Columns.Add(dr[columnIndex].ToString());

            int n = src_dt.Columns.Count;
            for (int i = 0; i < n; i++)
            {
                if (i == columnIndex) continue; //如果是被当作列名的列,则跳过

                DataRow new_dr = dt.NewRow();
                string columnName = src_dt.Columns[i].ColumnName;
                new_dr[0] = columnName;

                foreach (DataRow dr in src_dt.Rows)
                {
                    string newColumnName = dr[columnIndex].ToString();
                    new_dr[newColumnName] = dr[columnName];
                }

                dt.Rows.Add(new_dr);
            }

            return dt;
        }

        private void DisplayTable(DataTable _dt)
        {
            //表头
            Console.Write("| ");
            foreach (DataColumn _dc in _dt.Columns)
            {
                Console.Write(_dc.ColumnName + " | ");
            }
            Console.WriteLine();
            Console.WriteLine("----------------------------------------------------------------");
            //表体
            foreach (DataRow _tr in _dt.Rows)
            {
                Console.Write("| ");
                for (int i = 0; i < _dt.Columns.Count; i++)
                {
                    Console.Write(_tr[i] + " | ");
                }
                Console.WriteLine();
            }
        }

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有