如何在DBGrid中把一个字段做两行显示? 如果只想显示的话,可应用TSTRINGGRID或TDRAWGRID。将数据源中的数据按记录数设置它的列数,然后,在程序中用循环的方法将表中两字段的数据赋上去。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Delphi的DBGRid支持嵌套的字段显示,如某个字段由其他几个字段组成,但是好象只有Oracle数据库支持嵌套字段,如果你使用的是其他数据库引擎,就不好办了。只有重新定制DBGrid,或者增加一个计算字段,自己负责显示了。 929兄真是一句话点醒梦中人,本来我这个程序就只需要显示,用StringGrid的确方便多了,呵呵,只要是数据库,就情不自禁的跟DBGrid联系起来,到把STringGrid这东西给忘了:-)另外,小弟这各标题好像打错了,应该是“一个记录做两行显示”,呵呵,5214:-q 不过,还有一点想请教各位:在使用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的声明错误,是否更正!请各位指教,我还疏漏了什么??? TStringGrid0没有Register!解决方法有两个:1、自己编写一个组件并注册;2、将Form设计面板上的StringGrid1删掉,在程序运行中动态创建该StringGrid1,注意设置其Parent属性。 求教动态生成按钮 急,求得到系统桌面文件夹的api~ 如何拦截IP数据包、发送IP数据包??? 哪位大侠能否贴一下使用Spcomm串口控件的例程? 请教一个学生管理系统的问题! 今晚夜战toolbar2.Top:=66;不成功,大家看一下,有分的 Delphi比较烦!!! 大家觉得由DELPHI5到DELPHI7有什么大的区别? 在console程序中如何使用TClientSocket,如何才能让onConnect和onRead事件起作用。 rar Who has the components of making professional report? 关于预览和打印的问题?
而在使用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的声明错误,是否更正!
请各位指教,我还疏漏了什么???
解决方法有两个:
1、自己编写一个组件并注册;
2、将Form设计面板上的StringGrid1删掉,在程序运行中动态创建该StringGrid1,注意设置其Parent属性。