如何在DBGrid中把一个字段做两行显示?

jzy 2000-03-21 07:31:00
数据库的一个表中包含如下字段:一组设备的重力值,后面紧跟该组设备的水平角度值。现在要求,将该表显示在DBGrid中,重力和水平角度各占一行,且上下两行相对应。
请教各位大虾,应该如何解决?
...全文
276 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lin 2000-03-24
  • 打赏
  • 举报
回复
TStringGrid0没有Register!
解决方法有两个:
1、自己编写一个组件并注册;
2、将Form设计面板上的StringGrid1删掉,在程序运行中动态创建该StringGrid1,注意设置其Parent属性。
jzy 2000-03-24
  • 打赏
  • 举报
回复
不过,还有一点想请教各位:

在使用DBGrid时,我要使网格中不同数值的数据以不同的颜色显示,通常只需编写DBGrid的OnDrawColumnCell事件,根据条件更改颜色,然后调用DBGrid的成员函数DefaultDrawColumnCell;
而在使用StringGrid时,相对应的事件是OnDrawCell,对应的成员函数是DrawCell,但是我查看Grids.pas,发现TStringGrid居然把DrawCell(这是从TDrawGrid继承而来)声明成了protect,所以我无法在OnDrawCell事件响应函数(因为这个函数是Form1的成员)中调用DrawCell。
当然,要解决这一问题,有很多种方法,例如:不用DrawCell,而用TextRect或其他函数,或者干脆修改Grids.pas,把DrawCell声明成public,编译后再覆盖lib下的Grids.dcu(呵呵,这一招有点绝:-)

但是我尝试用这个方法,却好像行不通:

定一一个新类TStringGrid0继承TStringGrid,然后为TStringGrid0声明一public的成员函数,在函数中调用DrawCell;即:

type TStringGrid0=class(TStringGrid)
public
procedure DrawCell0(…………); //参数声明跟DrawCell一样
end;

procedure TStringGrid0.DrawCell0(…………);
begin
DrawCell(…………);
end;

//然后更改StringGrid1的定义
Var StringGrid1:TStringGrid0;

再在*.dfm文件中更改
object StringGrid1:TStringGrid0;

从理论上讲,这应该是可以的,因为TForm1就是这样声明的,但是编译的时候提示我StringGrid1的声明错误,是否更正!
请各位指教,我还疏漏了什么???
jzy 2000-03-24
  • 打赏
  • 举报
回复
929兄真是一句话点醒梦中人,本来我这个程序就只需要显示,用StringGrid的确方便多了,呵呵,只要是数据库,就情不自禁的跟DBGrid联系起来,到把STringGrid这东西给忘了:-)

另外,小弟这各标题好像打错了,应该是“一个记录做两行显示”,呵呵,5214:-q
supershan 2000-03-22
  • 打赏
  • 举报
回复
Lin 2000-03-22
  • 打赏
  • 举报
回复
  Delphi的DBGRid支持嵌套的字段显示,如某个字段由其他几个字段组成,但是好象只有Oracle数据库支持嵌套字段,如果你使用的是其他数据库引擎,就不好办了。只有重新定制DBGrid,或者增加一个计算字段,自己负责显示了。
zoao 2000-03-22
  • 打赏
  • 举报
回复
听,原有问题加上打印.
929 2000-03-22
  • 打赏
  • 举报
回复
如果只想显示的话,可应用TSTRINGGRID或TDRAWGRID。
将数据源中的数据按记录数设置它的列数,然后,在程序中用循环的方法将表中两字段的数据赋上去。

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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