请教一个数据窗口的设计问题

balloy 2002-01-29 10:07:37
问题是这样的,我现在在做一个学生成绩的管理系统,老师要求,需要象成绩表一样,纵向显示学生列表,横向则是所有的课程。如下:

学号 学生姓名 大学数学 大学英语 古代史 民间艺术赏析 ...
99123456 王海 80 70 75
99123457 王英 90 80 78
...
(由于学生可以选课,所以,表头上的课程数不固定。
上表中,王海只选了“古代史”,而王英只选了“民间艺术赏析”)


我的数据库设计是这样的:
CREATE TABLE [dbo].[XueJi] (
[Id] [int] IDENTITY (1, 1) NOT NULL ,
[XueHao] [varchar] (10) NOT NULL ,
[XingMing] [nvarchar] (10) NOT NULL ,
...
)

CREATE TABLE [dbo].[ChengJi] (
[Id] [int] IDENTITY (1, 1) NOT NULL ,
[XueShengId] [int] NOT NULL ,
[KeChengId] [int] NOT NULL ,
[XueQiId] [int] NOT NULL ,
[ZongFen] [smallint] NULL ,
)

请问,如何实现这样的数据窗口?多谢
...全文
149 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
alex_deng 2002-01-30
  • 打赏
  • 举报
回复
谢谢,其实我没帮上你什么忙
balloy 2002-01-30
  • 打赏
  • 举报
回复
算了,输入我不打算用这种界面了,实在太罗嗦。
不过,做为统计到很不错。

结帐!
balloy 2002-01-30
  • 打赏
  • 举报
回复
算了,输入我不打算用这种界面了,实在太罗嗦。
不过,做为统计到很不错。

结帐!
balloy 2002-01-29
  • 打赏
  • 举报
回复
多谢大家,问题已经基本上解决了。

再最后提一个小问题,
我知道,在Datawindow中,通过设置band的Color,可以轻松的使DataWindow的单双行显示颜色不同:
if (mod( getrow(), 2)=0, rgb(192,192,192), rgb(255,255,255))

问题是,如何使单双列显示不同颜色呢?我试图用getcolumn(),但却不能使用。
alex_deng 2002-01-29
  • 打赏
  • 举报
回复
好像也不可以修改
关键是用crosstab没有用group容易预制表的宽度
另外我用group时候得到了更好看的样子,是给外国人看的,非中国是的报表
wzyun 2002-01-29
  • 打赏
  • 举报
回复
交叉报表,烦
balloy 2002-01-29
  • 打赏
  • 举报
回复
哦,原来如此,我以前还没有用过crossTab,多谢!

另外,
to alex_deng(爱一个人好难!):
用group怎么做?是不是用group就可以修改了?
sincerity 2002-01-29
  • 打赏
  • 举报
回复
很典型的 crossTab 报表.
cdqy 2002-01-29
  • 打赏
  • 举报
回复
还可以使用动态数据窗口。
alex_deng 2002-01-29
  • 打赏
  • 举报
回复
group也可以实现了,而且绝对好看,
这个问题我做了两个星期
pbworm 2002-01-29
  • 打赏
  • 举报
回复
crossTab完全可以实现啊!
cdqy 2002-01-29
  • 打赏
  • 举报
回复
如果不需要修改可以用交叉报表实现。
balloy 2002-01-29
  • 打赏
  • 举报
回复
to l_hw(l_hw):
不行啊,不起效果。

另外,我想更新主表中的一行,想使用ReSelectRow()函数,但Pb的帮助却说只有Updatable columns可以更新,而我在crossTab型DW中的各列都是不可更新的,怎么办?
l_hw 2002-01-29
  • 打赏
  • 举报
回复
在datawindow的constructor事件中写入下语句:
其中 ColorValue 定义成自己希望的值,datawindow各列的font的background属性定为custom.

integer colcount,i
colcount=integer(dw_1.describe('datawindow.column.count'))
for i=1 to colcount
IF mod(i,2)=1 THEN
modify('#'+String(i)+'.Background.Color=255')
else
modify('#'+String(i)+'.Background.Color=60000')
end if
next


balloy 2002-01-29
  • 打赏
  • 举报
回复
to alex_deng(爱一个人好难!):
手动肯定不行,课程名、课程数都是不一定的,而且一个大学的课程数少说也上百把,手动控制是恶梦。
balloy 2002-01-29
  • 打赏
  • 举报
回复
难道真的不行吗?如果不行就算了,
各位大虾,帮人帮到底,我再问个问题,

由于crossTab无法修改,所以,我把这个表做为主表,把一个学生的所有成绩列出来,做为从表,学生的成绩可以在从表中修改,那么,从表修改后,怎样同步更新主表呢?

我的想法是更新主表中的一行,但好像Retrieve()函数又不行,有没有什么其它办法呢?
多谢大家!
alex_deng 2002-01-29
  • 打赏
  • 举报
回复
手动改一下行吗?
这就看出来group的优点了——能具体的确定列数
balloy 2002-01-29
  • 打赏
  • 举报
回复
getcolumn()在pb的帮助中可以查到啊,但却不能在Color的表达式中使用,怎么办?

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧