图片分行显示,DataTable竖表变横表的方法
代码参考过Phiree的http://www.cnblogs.com/phiree/archive/2005/11/19/280460.aspx文章,但是在套用过程用发现图片分行排列的时候Phiree的方法排列出来的图片顺序是竖排的,并是我想像中的横排,所以修改了他的记录插入方法,这样排列顺序就完全按照图片添加的顺序从左到右,从上到下排列。最后一行如果图片不够一行,则自动以最后的图片填充满一行。你也可以修改代码来显示空白图片。
well,代码如下:
//DataTable是传入的需要转换的竖表
//int iColumnSize是每行需要显示的记录数目,在我的应用中的每行显示的图片数目
//int[] iColumnID是需要将传入的竖表中哪些列转换到新的横表中去
private DataTable ChangeDataTable(DataTable dt,int iColumnSize,int[] iColumnID)
{
DataTable newdt = new DataTable();
//int[] iColumnID = new int[]{0,1,2};
//int iColumnSize = 5;
int ColumnCount = iColumnID.Length;
int totalRows = dt.Rows.Count;
int itmp = totalRows % iColumnSize; //计算行数
int iRows;
if(itmp == 0)
{
iRows = totalRows / iColumnSize;
}
else
{
iRows = totalRows / iColumnSize + 1;
}
for(int i=0;i<iColumnSize;i++) //列插入新表
{
for(int j=0;j<ColumnCount;j++)
{
DataColumn dc=new DataColumn(dt.Columns[iColumnID[j]].ColumnName + i.ToString(),dt.Columns[iColumnID[j]].DataType);
newdt.Columns.Add(dc);
}
}
for(int i=0;i<iRows;i++) //将行插入新表
{
DataRow dr=newdt.NewRow();
int m = 0;
for(int j=0;j<iColumnSize;j++)
{
for(int k=0;k<ColumnCount;k++)
{
int n = i*iColumnSize + j;
if(n<totalRows)
{
dr[m] = dt.Rows[n][k];
}
else
{
dr[m]=dt.Rows[totalRows-1][k];
}
m++;
}
}
newdt.Rows.Add(dr);
}
//int iColumnSize是每行需要显示的记录数目,在我的应用中的每行显示的图片数目
//int[] iColumnID是需要将传入的竖表中哪些列转换到新的横表中去
private DataTable ChangeDataTable(DataTable dt,int iColumnSize,int[] iColumnID)
{
DataTable newdt = new DataTable();
//int[] iColumnID = new int[]{0,1,2};
//int iColumnSize = 5;
int ColumnCount = iColumnID.Length;
int totalRows = dt.Rows.Count;
int itmp = totalRows % iColumnSize; //计算行数
int iRows;
if(itmp == 0)
{
iRows = totalRows / iColumnSize;
}
else
{
iRows = totalRows / iColumnSize + 1;
}
for(int i=0;i<iColumnSize;i++) //列插入新表
{
for(int j=0;j<ColumnCount;j++)
{
DataColumn dc=new DataColumn(dt.Columns[iColumnID[j]].ColumnName + i.ToString(),dt.Columns[iColumnID[j]].DataType);
newdt.Columns.Add(dc);
}
}
for(int i=0;i<iRows;i++) //将行插入新表
{
DataRow dr=newdt.NewRow();
int m = 0;
for(int j=0;j<iColumnSize;j++)
{
for(int k=0;k<ColumnCount;k++)
{
int n = i*iColumnSize + j;
if(n<totalRows)
{
dr[m] = dt.Rows[n][k];
}
else
{
dr[m]=dt.Rows[totalRows-1][k];
}
m++;
}
}
newdt.Rows.Add(dr);
}