在LoveCherry的blog中(http://www.cnblogs.com/lovecherry/archive/2005/04/28/146749.html)有一个竖表转横表的方法,但是只能支持只有一列的DataTable, 我改进了一下 可以支持多列.
public DataTable MakeData(DataTable dt,int iSize,int[] iColumnID) //isize:每列行数 iColumnID 需要横向排列的列的序号数组
{
int ColumnCount=iColumnID.Length;
int itmp=dt.Rows.Count%iSize;
int iColumn; //列数
if(itmp==0)
iColumn=dt.Rows.Count/iSize;
else
iColumn=dt.Rows.Count/iSize+1;
DataTable newdt=new DataTable();
for(int i=0;i<iColumn;i++)
{
for(int j=0;j<ColumnCount;j++)
{ string aa=dt.Columns[iColumnID[j]].ColumnName+i;
DataColumn dc=new DataColumn(dt.Columns[iColumnID[j]].ColumnName+i,dt.Columns[iColumnID[j]].DataType);
newdt.Columns.Add(dc);
}
}
for(int i=0;i<iSize;i++)
{
DataRow dr=newdt.NewRow();
for(int j=0;j<iColumn;j++)
{
for(int k=0;k<ColumnCount;k++)
{
if((i+j*iSize)<dt.Rows.Count)
{ string aa=dt.Columns[iColumnID[k]].ColumnName+j;
dr[dt.Columns[iColumnID[k]].ColumnName+j]=dt.Rows[i+j*iSize][iColumnID[k]];
}
}
}
newdt.Rows.Add(dr);
}
return newdt;
}
{
int ColumnCount=iColumnID.Length;
int itmp=dt.Rows.Count%iSize;
int iColumn; //列数
if(itmp==0)
iColumn=dt.Rows.Count/iSize;
else
iColumn=dt.Rows.Count/iSize+1;
DataTable newdt=new DataTable();
for(int i=0;i<iColumn;i++)
{
for(int j=0;j<ColumnCount;j++)
{ string aa=dt.Columns[iColumnID[j]].ColumnName+i;
DataColumn dc=new DataColumn(dt.Columns[iColumnID[j]].ColumnName+i,dt.Columns[iColumnID[j]].DataType);
newdt.Columns.Add(dc);
}
}
for(int i=0;i<iSize;i++)
{
DataRow dr=newdt.NewRow();
for(int j=0;j<iColumn;j++)
{
for(int k=0;k<ColumnCount;k++)
{
if((i+j*iSize)<dt.Rows.Count)
{ string aa=dt.Columns[iColumnID[k]].ColumnName+j;
dr[dt.Columns[iColumnID[k]].ColumnName+j]=dt.Rows[i+j*iSize][iColumnID[k]];
}
}
}
newdt.Rows.Add(dr);
}
return newdt;
}