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#程序设计有所帮助。