注册 登录
编程论坛 ASP.NET技术论坛

超级难题:应如何将这些数据绑定到DridView控件中显示出来?

foshan 发布于 2007-03-20 12:42, 1645 次点击
名为“baobiao”的数据表的字段如下(其中MYDATE字段为“日期”,WJLX字段为“文件类型”,WJLJ字段为“文件存放的路径”):

ID MYDATE WJLX WJLJ
1 2007年1月 1 2007\GCBB\A1.xls
2 2007年1月 2 2007\GCBB\A2.xls
3 2007年1月 3 2007\GCBB\A3.xls
4 2007年1月 4 2007\GCBB\A4.xls
5 2007年2月 1 2007\GCBB\B1.xls
6 2007年2月 2 2007\GCBB\B2.xls
7 2007年2月 3 2007\GCBB\B3.xls
8 2007年2月 4 2007\GCBB\B4.xls

想要在 DridView控件中每一行显示:

时间 类型为1的文件路径 类型为2的文件路径 类型为3的文件路径 类型为4的文件路径
2007年1月 2007\GCBB\A1.xls 2007\GCBB\A2.xls 2007\GCBB\A3.xls 2007\GCBB\A4.xls
2007年2月 2007\GCBB\B1.xls 2007\GCBB\B2.xls 2007\GCBB\B3.xls 2007\GCBB\B4.xls

我想来想去也不知道如何处理:采用 SqlCommand cmdSel = new SqlCommand("select ID,MYDATE,WJLX,WJLJ from baobiao", conn1) 将数据表的数据通过 SqlDataAdapter 给 DataSet数据集 ds1 后,如何将 ds1.Tables["baobiao"] 中的数据再处理一下,变成横向地在DridView控件显示出来(同一日期的四种不同类型的文件分四列在同一行显示出来)???谢谢!

[此贴子已经被作者于2007-3-20 13:11:54编辑过]

24 回复
#2
冰镇柠檬汁儿2007-03-20 13:20

SqlDataAdapter myAdapter = new SqlDataAdapter("select ID,MYDATE,WJLX,WJLJ from baobiao", conn1);
DataSet mySet = new DataSet();

myAdapter.Fill(mySet, "baobiao");

ds1.Tables["baobiao"]......

#3
foshan2007-03-20 14:02
谢谢!但是这样并不能解决最关键的问题:同一日期的四种不同类型的文件路径分四列在同一行显示出来?(说白了就是要数据库“竖向”的数据“横向”地显示出来)
是不是要再创建一个ds1.Tables[**],然后再创建五列,再在 ds1.Tables["baobiao"]中进行循环???

[此贴子已经被作者于2007-3-20 14:06:10编辑过]

#4
冰镇柠檬汁儿2007-03-20 14:12
你想什么呢,我都把你的错误改了,不是关键的吗
要想显示,要么绑定到控件中,要么用DataTable接收,然后用DataTable显示
#5
foshan2007-03-21 09:00
谢谢!不是关键,关键是:请大家细心地看一下我的数据表结构,数据表的结构是“竖向”地储存同一“日期”的四种不同的“文件类型”的“文件路径”的,而我是想将这些数据按同一日期的四种不同类型的文件路径分四列在 DridView控件 同一行显示出来?(说白了就是要数据库“竖向”的数据“横向”地显示出来)。不知我讲清楚没有???请大家帮忙,谢谢!
#6
bygg2007-03-21 12:34
你不是在SQL版块里面问了这个SQL的问题吗?
SQL都出来了..再用2楼的方法就行了..
#7
foshan2007-03-21 13:03

在 bygg 斑竹的提示下到了SQL版块里面的精华帖中寻得如下至宝(感谢卜酷塔 斑竹的推荐收藏),不过,我对 存储过程 一点也不知晓,不知道应该套用到我遇到的问题上来……

行列转换--普通

假设有张学生成绩表(CJ)如下
Name Subject Result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82

想变成
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82

declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from CJ) as a
select @sql = @sql+' from test group by name'
exec(@sql)

#8
冰镇柠檬汁儿2007-03-21 13:45
那是你表的设计有问题好不好,你为什么不把表的设计改了呢
#9
foshan2007-03-21 16:19
如果将数据表的结构设计成横向结构的话,显示数据就很容易,但是如果在数据表要添加、修改、删除不同类型的文件就成了大问题,所以改用竖向结构的。现在只能是恶补数据库的 存储过程 这方面的知识了。
#10
chenjin1452007-03-21 16:23

select MYDATE,(case WJLX when 1 end) as WJLJ1,
(case WJLX when 2 end) as WJLJ2,
(case WJLX when 3 end) as WJLJ3,
(case WJLX when 4 end) as WJLJ4
from baobiao

#11
chenjin1452007-03-21 16:24
group by MYDATE
#12
冰镇柠檬汁儿2007-03-21 16:34
chenjin145这样会报错,说end附近有语法错误
#13
棉花糖ONE2007-03-21 16:35
WJLX这个字段的值有限的话,就用点简单的
select mydate,max(case Wjlx when 1 then wjlj else '' end) as N'类型为1的文件路径 ',
max(case Wjlx when 2 then wjlj else '' end) as N'类型为2的文件路径 ',
max(case Wjlx when 3 then wjlj else '' end) as N'类型为3的文件路径 ',
max(case Wjlx when 4 then wjlj else '' end) as N'类型为4的文件路径 ' from tablename group by mydate
wjlx的值有限个没必要写成动态的.这样就行了
#14
chenjin1452007-03-21 16:35
忘记写then了

没查询分析器调试

应该还要加sum
#15
foshan2007-03-21 16:36
以下是引用chenjin145在2007-3-21 16:23:56的发言:

select MYDATE,(case WJLX when 1 end) as WJLJ1,
(case WJLX when 2 end) as WJLJ2,
(case WJLX when 3 end) as WJLJ3,
(case WJLX when 4 end) as WJLJ4
from baobiao

谢谢!上述代码放在哪里的啊?是不是 数据库的 存储过程 中?还是在 *.aspc.cs 页面中???

#16
棉花糖ONE2007-03-21 16:37
字符型的不能用sum,只能用max
#17
chenjin1452007-03-21 16:39
确实
#18
foshan2007-03-21 16:48

刚学习了一下存储过程,如下是可行的。
ALTER PROCEDURE dbo.StoredProcedure1
/*
(
@parameter1 int = 5,
@parameter2 datatype OUTPUT
)
*/
AS
select mydate,max(case Wjlx when 1 then wjlj else '' end) as N'类型为1的文件路径 ',
max(case Wjlx when 2 then wjlj else '' end) as N'类型为2的文件路径 ',
max(case Wjlx when 3 then wjlj else '' end) as N'类型为3的文件路径 ',
max(case Wjlx when 4 then wjlj else '' end) as N'类型为4的文件路径 ' from baobiao group by mydate

RETURN


还有两个问题请教:
1、如何通过数据适配器将数据储存在数据集DATASET中?然后再将数据源绑定到GridView控件中显示出来啊
2、 以下的语句能否放在 *.aspx.cs 页面中啊???
select mydate,max(case Wjlx when 1 then wjlj else '' end) as N'类型为1的文件路径 ',
max(case Wjlx when 2 then wjlj else '' end) as N'类型为2的文件路径 ',
max(case Wjlx when 3 then wjlj else '' end) as N'类型为3的文件路径 ',
max(case Wjlx when 4 then wjlj else '' end) as N'类型为4的文件路径 ' from baobiao group by mydate

[此贴子已经被作者于2007-3-21 16:51:12编辑过]

#19
棉花糖ONE2007-03-21 16:51

我的语句本来就能用,但是你这存储过程是多余的,你看你定义的那些参数全都没用上

#20
foshan2007-03-21 17:00
试过了,行!开心啊!感谢几位前辈,谢谢!谢谢!
SqlCommand cmdSel = new SqlCommand("select mydate,max(case Wjlx when 1 then wjlj else '' end) as N'A ',max(case Wjlx when 2 then wjlj else '' end) as N'AA ',max(case Wjlx when 3 then wjlj else '' end) as N'AAA ',max(case Wjlx when 4 then wjlj else '' end) as N'AAAA ' from baobiao group by mydate", conn1); //创建DataAdapter(数据适配器)
#21
冰镇柠檬汁儿2007-03-21 17:01
又学到东西了
#22
foshan2007-03-22 11:09
还有一个难题请教大家:在此基础上,如何在输出数据时在最左列增加一个字段,是自动编号的(1、2、3、4、5……)???谢谢!
#23
冰镇柠檬汁儿2007-03-22 11:11

你要加的东西,和那些没什么关系

[此贴子已经被作者于2007-3-22 11:14:06编辑过]

#24
chenjin1452007-03-22 11:23
创建个临时表

加个identity(1,1)

再查出来
#25
棉花糖ONE2007-03-22 11:24
select IDENTITY(int, 1,1) as id,* into table1 from table2 把table2中的数据导进去
drop table table2 --删除table2
sp_rename 'table1','table2' --重命名table2为table1
1