目标 在程序中实现行列转换 效果 实现流程图 测试用的XML文件 <? xml version="1.0" encoding="utf-8" ?> < table > < tr > < 编码 > A01 </ 编码 > < 内容 > 你 </ 内容 > < M0601 > 1 </ M0601 > < M0602 > 2 </ M0602 > </ tr > < tr > < 编码 > A02 </ 编码 > < 内容 > 我 </ 内容 > < M0601 > 3 </ M0601 > < M0602 > 4 </ M0602 > </ tr > </ table > 实现程序 <% @ Page language="c#" Codebehind="RowColumnConvert.aspx.cs" AutoEventWireup="false" Inherits="DataGridTest.RowColumnConvert" %> <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > < HTML > < HEAD > < title > WebForm2 </ title > < meta name ="GENERATOR" Content ="Microsoft Visual Studio .NET 7.1" > < meta name ="CODE_LANGUAGE" Content ="C#" > < meta name ="vs_defaultClientScript" content ="JavaScript" > < meta name ="vs_targetSchema" content ="http://schemas.microsoft.com/intellisense/ie5" > </ HEAD > < body MS_POSITIONING ="GridLayout" > < form id ="Form1" method ="post" runat ="server" > < FONT face ="宋体" > < asp:DataGrid id ="dgOld" style ="Z-INDEX: 101; LEFT: 72px; POSITION: absolute; TOP: 48px" runat ="server" Width ="312px" Height ="88px" ></ asp:DataGrid > < asp:DataGrid id ="dgNew" style ="Z-INDEX: 102; LEFT: 96px; POSITION: absolute; TOP: 272px" runat ="server" Width ="256px" Height ="144px" ></ asp:DataGrid > < asp:Button id ="btnChange" style ="Z-INDEX: 103; LEFT: 168px; POSITION: absolute; TOP: 208px" runat ="server" Width ="72px" Height ="32px" Text ="转换" ></ asp:Button > < asp:Label id ="Label1" style ="Z-INDEX: 104; LEFT: 536px; POSITION: absolute; TOP: 136px" runat ="server" Width ="136px" Height ="40px" > Label </ asp:Label ></ FONT > </ form > </ body > </ HTML > /*********************************************************************** * Module: RowColumnConvert.cs * Author: skyendless * Purpose: Definition of the Class RowColumnConvert ***********************************************************************/using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;namespace DataGridTest{ /// < summary > /// WebForm2 的摘要说明。 /// </ summary > public class RowColumnConvert : System.Web.UI.Page { protected System.Web.UI.WebControls.DataGrid dgOld; protected System.Web.UI.WebControls.DataGrid dgNew; protected System.Web.UI.WebControls.Label Label1; protected System.Web.UI.WebControls.Button btnChange; DataSet ds = new DataSet(); private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 try { // //具体路径根据自己的情况进行修改 // ds.ReadXml(@"C:/Inetpub/wwwroot/DataGridTest/test.xml"); dataBind(this.dgOld); } catch(Exception ex) { this.Label1.Text = ex.Message.ToString (); } } #region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// < summary > /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </ summary > private void InitializeComponent() { this.btnChange.Click += new System.EventHandler(this.Button1_Click); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void Button1_Click(object sender, System.EventArgs e) { this.dgNew.DataSource = DataConvert(ds,2,3).Tables[0].DefaultView; this.dgNew.DataBind(); } private void dataBind(DataGrid dg) { dg.DataSource = ds.Tables[0].DefaultView; dg.DataBind(); } /// < summary > /// 行列转换 /// </ summary > /// < param name ="ds" > 要转换的数据源 </ param > /// < param name ="startIndex" > 起始字段索引 </ param > /// < param name ="endIndex" > 终止字段索引 </ param > /// < returns ></ returns > private DataSet DataConvert(DataSet ds,int startIndex,int endIndex) { DataSet dsNew = new DataSet(); try { for(int i = startIndex;i < =endIndex ;i++) { DataTable dtPart = ds.Tables[0].Copy();//取数据源一个拷贝 for(int j = startIndex;j<=endIndex;j++) { if(i! =j) { // //去掉不是要取出的字段 // dtPart.Columns.Remove(dtPart.Columns[j].ColumnName); } } // //增加一个字段 // DataColumn dc = new DataColumn ("月份",System.Type.GetType("System.String")); dc.Expression = "'" +dtPart.Columns[startIndex].ColumnName+"'"; //定义默认值 dtPart.Columns.Add(dc); dtPart.Columns[startIndex].ColumnName = "数量" ;//修改字段名 if(dsNew.Tables.Count > 0) { dsNew.Merge(dtPart); //合并 } else { dsNew.Tables.Add(dtPart); } } } catch(Exception ex) { this.Label1.Text = ex.Message.ToString(); } return dsNew; } }}