有没有办法让 DataGrid 中的数据纵排? 无内容 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 转自本版 LoveCherry的blog---------------------如何利用DataGrid纵向显示数据? 有的时候想实现类似下图,第二个图示的效果: 我们可能首先会想到DataList,其实DataList我们这里设置: <asp:DataList id="DataList1" runat="server" RepeatColumns="10"> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem,"test") %> </ItemTemplate> </asp:DataList> 这样显示出来的是上图的效果,并不能得到预期的纵向显示一定行的效果。 其实遇到这样的情况可以对数据源做一下转换。 比如我们建立这样的测试数据源: 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); } 数据表中有54行数据,我们希望它一列显示8行,也就是分7列显示,达到上图的效果,写一个方法进行转换。 private DataTable MakeData(DataTable dt,int iSize,int iColumnID) { 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++) { DataColumn dc=new DataColumn(dt.Columns[iColumnID].ColumnName+i,dt.Columns[iColumnID].DataType); newdt.Columns.Add(dc); } for(int i=0;i<iSize;i++) { DataRow dr=newdt.NewRow(); for(int j=0;j<iColumn;j++) { if((i+j*iSize)<dt.Rows.Count)dr[dt.Columns[iColumnID].ColumnName+j]=dt.Rows[i+j*iSize][iColumnID]; } newdt.Rows.Add(dr); } return newdt; } 然后绑定即可: this.DataGrid1.DataSource=MakeData(dt,8,0); this.DataGrid1.DataBind(); 在这里仅仅说明一下这个方法三个参数的含义: 第一个参数传递一个原来的数据表进去 第二个参数表示希望这一列显示多少行 第三个参数表示这个字段是数据表的第几列的字段,这里的数据表只有1列,所以写0 SqlConnection conn=new SqlConnection("server=localhost;uid=sa;pwd=;database=pubs");conn.Open();string strSQL="SELECT au_lname FROM authors";DataRow drName;DataTable dtStuUsers=new DataTable("authors");DataSet dsStudent=new DataSet();dsStudent.Tables.Add(dtStuUsers);int intCount;intCount=Convert.ToInt32(txt1.Text);//选择或输入动态的列数SqlDataReader sdrStudent;SqlCommand cmdStudent;for(int i=0;i<intCount;i++){ //创建表中的列 dtStuUsers.Columns.Add(new DataColumn("列"+i.ToString(),typeof(string)));} //打开数据集 cmdStudent=new SqlCommand(strSQL,conn); sdrStudent=cmdStudent.ExecuteReader(); //向内存表中添加数据while(sdrStudent.Read()){ drName=dtStuUsers.NewRow(); for(int i=0;i<intCount;i++) { try { drName[i]=sdrStudent.GetString(0); if(i<intCount-1) { sdrStudent.Read(); } } catch(Exception) { } } dtStuUsers.Rows.Add(drName);}dgName.DataSource=dsStudent.Tables["authors"];dgName.DataBind(); 求一很有意思的SQL语句...谢谢大家!!! 这个正则的双引号怎么写啊??? 在使用模板页后,aps.net有一个函数想传值给js函数 定制WSS页面的问题 我将一些"客户端javascript脚本和图片"嵌入到资源文件中 datagrid显示不同的数据 求教!! 求一个日历控件的设计颜色 要求漂亮 SMTP "SendUsing”配置值无效 在线等待(急)!! 求解:如何在SQL数据库里把WORD文档读出来,下载到客户端,并调用WORD打开. asp.net新手的烦恼:( 我在用ASP.NET快速入门教程学习.NET是经常出现这个错误请帮忙?
---------------------如何利用DataGrid纵向显示数据?
有的时候想实现类似下图,第二个图示的效果: 我们可能首先会想到DataList,其实DataList我们这里设置:
<asp:DataList id="DataList1" runat="server" RepeatColumns="10">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"test") %>
</ItemTemplate>
</asp:DataList>
这样显示出来的是上图的效果,并不能得到预期的纵向显示一定行的效果。
其实遇到这样的情况可以对数据源做一下转换。
比如我们建立这样的测试数据源:
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);
} 数据表中有54行数据,我们希望它一列显示8行,也就是分7列显示,达到上图的效果,写一个方法进行转换。 private DataTable MakeData(DataTable dt,int iSize,int iColumnID)
{
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++)
{
DataColumn dc=new DataColumn(dt.Columns[iColumnID].ColumnName+i,dt.Columns[iColumnID].DataType);
newdt.Columns.Add(dc);
}
for(int i=0;i<iSize;i++)
{
DataRow dr=newdt.NewRow();
for(int j=0;j<iColumn;j++)
{
if((i+j*iSize)<dt.Rows.Count)dr[dt.Columns[iColumnID].ColumnName+j]=dt.Rows[i+j*iSize][iColumnID];
}
newdt.Rows.Add(dr);
}
return newdt;
} 然后绑定即可: this.DataGrid1.DataSource=MakeData(dt,8,0);
this.DataGrid1.DataBind(); 在这里仅仅说明一下这个方法三个参数的含义:
第一个参数传递一个原来的数据表进去
第二个参数表示希望这一列显示多少行
第三个参数表示这个字段是数据表的第几列的字段,这里的数据表只有1列,所以写0
conn.Open();
string strSQL="SELECT au_lname FROM authors";
DataRow drName;
DataTable dtStuUsers=new DataTable("authors");
DataSet dsStudent=new DataSet();
dsStudent.Tables.Add(dtStuUsers);
int intCount;
intCount=Convert.ToInt32(txt1.Text);//选择或输入动态的列数
SqlDataReader sdrStudent;
SqlCommand cmdStudent;
for(int i=0;i<intCount;i++)
{
//创建表中的列
dtStuUsers.Columns.Add(new DataColumn("列"+i.ToString(),typeof(string)));
}
//打开数据集
cmdStudent=new SqlCommand(strSQL,conn);
sdrStudent=cmdStudent.ExecuteReader();
//向内存表中添加数据
while(sdrStudent.Read())
{ drName=dtStuUsers.NewRow();
for(int i=0;i<intCount;i++)
{
try
{
drName[i]=sdrStudent.GetString(0);
if(i<intCount-1)
{
sdrStudent.Read();
}
}
catch(Exception)
{
}
}
dtStuUsers.Rows.Add(drName);
}
dgName.DataSource=dsStudent.Tables["authors"];
dgName.DataBind();