C#中DataTable实现行列转换的方法
本文实例讲述了C#中DataTable实现行列转换的方法。分享给大家供大家参考。具体实现方法如下:
protectedvoidPage_Load(objectsender,EventArgse) { if(!IsPostBack) { DataTablett=GetCrossTable(CreateDT()); GridView1.DataSource=tt; GridView1.DataBind(); } } //创建DataTable protectedDataTableCreateDT() { DataTabletblDatas=newDataTable("Datas"); //数据列 tblDatas.Columns.Add("姓名",Type.GetType("System.String")); tblDatas.Columns.Add("科目",Type.GetType("System.String")); tblDatas.Columns.Add("分数",Type.GetType("System.Int32")); tblDatas.Rows.Add(newobject[]{"张三","语文",89}); tblDatas.Rows.Add(newobject[]{"张三","数学",90}); tblDatas.Rows.Add(newobject[]{"张三","英语",79}); tblDatas.Rows.Add(newobject[]{"张三","地理",70}); tblDatas.Rows.Add(newobject[]{"张三","生物",95}); tblDatas.Rows.Add(newobject[]{"李四","语文",87}); tblDatas.Rows.Add(newobject[]{"李四","英语",86}); tblDatas.Rows.Add(newobject[]{"李四","地理",82}); tblDatas.Rows.Add(newobject[]{"王五","语文",81}); tblDatas.Rows.Add(newobject[]{"王五","数学",70}); tblDatas.Rows.Add(newobject[]{"王五","英语",88}); tblDatas.Rows.Add(newobject[]{"王五","生物",96}); returntblDatas; } ///<summary> ///将DataTable的第二列的值转化为列 //(即将原来的行表,转化成交叉表,没有对应值则默认"0") ///</summary> ///<paramname="dt">必须三列,第三列为值</param> ///<returns></returns> publicstaticDataTableGetCrossTable(DataTabledt) { if(dt==null||dt.Columns.Count!=3||dt.Rows.Count==0) { returndt; } else { DataTableresult=newDataTable(); result.Columns.Add(dt.Columns[0].ColumnName); DataTabledtColumns=dt.DefaultView.ToTable("dtColumns",true,dt.Columns[1].ColumnName); for(inti=0;i<dtColumns.Rows.Count;i++) { stringcolName; if(dtColumns.Rows[1][0]isDateTime) { colName=Convert.ToDateTime(dtColumns.Rows[i][0]).ToString(); } else { colName=dtColumns.Rows[i][0].ToString(); } result.Columns.Add(colName); result.Columns[i+1].DefaultValue="0"; } DataRowdrNew=result.NewRow(); drNew[0]=dt.Rows[0][0]; stringrowName=drNew[0].ToString(); foreach(DataRowdrindt.Rows) { stringcolName=dr[1].ToString(); doubledValue=Convert.ToDouble(dr[2]); if(dr[0].ToString().Equals(rowName,StringComparison.CurrentCultureIgnoreCase)) { drNew[colName]=dValue.ToString(); } else { result.Rows.Add(drNew); drNew=result.NewRow(); drNew[0]=dr[0]; rowName=drNew[0].ToString(); drNew[colName]=dValue.ToString(); } } result.Rows.Add(drNew); returnresult; } }
希望本文所述对大家的C#程序设计有所帮助。