(论坛答疑点滴)如果用DataGrid实现类似DataList多列的效果

王朝asp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

上一次说了怎么利用DataGrid纵向显示

http://www.cnblogs.com/lovecherry/archive/2005/04/23/143819.html

其实这么做的好处在于DataGrid能够方便的进行分页,这个排列次序接近于DataList的RepeatDirection="Vertical"效果

今天再来对上次的程序进行一下修改,实现RepeatDirection="Horizontal"的效果,同时启用DataGrid的分页。

这样可以弥补DataList不能自动分页的不足,但是效率上来说其实是很差的。

<asp:DataGrid id="DataGrid1" runat="server" AllowPaging="True" PageSize="4"></asp:DataGrid>

private DataTable MakeData(DataTable dt,int iSize,int iColumnID)

{

int itmp=dt.Rows.Count%iSize;

int iRow;

if(itmp==0)

iRow=dt.Rows.Count/iSize;

else

iRow=dt.Rows.Count/iSize+1;

DataTable newdt=new DataTable();

for(int i=0;i<iSize;i++)

{

DataColumn dc=new DataColumn(dt.Columns[iColumnID].ColumnName+i,dt.Columns[iColumnID].DataType);

newdt.Columns.Add(dc);

}

for(int i=0;i<iRow;i++)

{

DataRow dr=newdt.NewRow();

for(int j=0;j<iSize;j++)

{

if((j+i*iSize)<dt.Rows.Count)dr[dt.Columns[iColumnID].ColumnName+j]=dt.Rows[j+i*iSize][iColumnID];

}

newdt.Rows.Add(dr);

}

return newdt;

}

private void Page_Load(object sender, System.EventArgs e)

{

// 在此处放置用户代码以初始化页面

if(!IsPostBack)

{

SetBind();

}

}

private void SetBind()

{

DataTable dt=new DataTable();

DataColumn dc=new DataColumn("test",Type.GetType("System.String"));

dt.Columns.Add(dc);

for(int i=1;i<=54;i++)

{

DataRow dr=dt.NewRow();

dr["test"]="测试"+i;

dt.Rows.Add(dr);

}

this.DataGrid1.DataSource=MakeData(dt,4,0);

this.DataGrid1.DataBind();

}

private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)

{

this.DataGrid1.CurrentPageIndex=e.NewPageIndex;

SetBind();

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有