日期:2014-05-18  浏览次数:20442 次

如何实现横着的表格?有人做过吗
我想做成这种效果  
姓名   张三   李四   王五  
年龄     25       26       27  
gridview不能这样横向显示  
DetailsView可以横向却只能显示一条记录  
用dataList的话不表头又不横向显示,在表单的上边显示,不知道怎么设定成横向  


------解决方案--------------------
dataList罗,第一条记录放标题就可以了。

不过如果是为了显示,自己写个 Table 不就更方便
------解决方案--------------------
lz说的是行变列的问题吧?
1.sql 2005直接支持行变列的数据集输出;
2.sql 2000里自己写行变列的sql语句输出数据集
3.也可以定义一个datatable,不过行数太多的话这样的效率很慢

对于方法2,可以写个类似如下的行列转换sql——
set nocount on
SET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON
declare @begin varchar(50),@end varchar(50)
set @begin= '2006-07-01 '
set @end= '2006-07-24 '
declare @lSql varchar(2000),@lSql2 varchar(8000) --生成交叉表的SQL语句。
declare @lItemID varchar(20)
declare Items scroll cursor for
select ServiceID from dbo.Students--假设的表
where feetype=1
order by ServiceID
open Items
select @lSql= "select [head]= '姓名 ' "
select @lSql2= "select [head]= '年龄 ' "
fetch first FROM Items INTO @lItemID
while @@fetch_status=0
Begin
select @lSql = @lSql + ",[ " + @lItemID + "]= ' " + @lItemID + " ' "
select @lSql2 = @lSql2 + ",[ " + @lItemID + "]= max(case sname when ' " + @lItemID + " ' then convert(varchar(10),pv) else '0 ' end) "
fetch next FROM Items INTO @lItemID
End
close Items
deallocate Items
select @lSql2=@lSql2+ " from (select pv=count(recordid),sname from dbo.StudentsViewLog where viewtime> ' "+@begin --假设的表
+ " ' and viewtime < ' "+@end+ " ' group by sname) as r group by day order by [head] "
print (@lSql+ " union all " + @lSql2)
exec (@lSql+ " union all " + @lSql2)

打印出来后的sql就是——

select [head]= '姓名 ',[张三]= '张三 ' ,[李四]= '李四 ' ,[王五]= '王五 '
union all
select [head]= '年龄 ',[张三]= max(case sname when '张三 ' then convert(varchar(10),pv) else '0 ' end),
[李四]= max(case sname when '李四 ' then convert(varchar(10),pv) else '0 ' end),
[王五]= max(case sname when '王五 ' then convert(varchar(10),pv) else '0 ' end)
from
(select pv=count(recordid),sname from dbo.StudentsViewLog
where viewtime> '2006-07-01 ' and viewtime < '2006-07-24 ' group by sname
) as r
order by [head]