求一个最简单的方法,来实现:判断dbgrid的所有单元格,值为"零"时,显示为"空"。(100)

  • 主题发起人 主题发起人 bigmistake
  • 开始时间 开始时间
B

bigmistake

Unregistered / Unconfirmed
GUEST, unregistred user!
我能想到的是:后台存储过程对每个字段“格式化”后输出,可是字段很多,写起来太烦了。
 
设置字段的OnGetText,可以通过循环设置所有字段的ongetText对应于同一个OnGetText事件。如果字段类型是float,int/laregeint/word等,且数值为0,则设置text=''
 
znxia:可是如何让所有的字段知道应该判断自己而不是所调用事件的字段呢?能给个具体代码么?谢谢!
 
procedure TForm1.Button1Click(Sender: TObject);var I:Integer;begin for I:=0 to Query1.FieldCount-1 do if Query1.Fields.DataType in [ftSmallint, ftInteger, ftWord, ftFloat, ftCurrency, ftBCD,ftAutoInc,ftLargeint] then Query1.Fields.OnGetText := Query1GetText;end;procedure TForm1.Query1GetText(Sender: TField; var Text: String; DisplayText: Boolean);begin if Sender.AsFloat=0 then Text:='' else if Sender.DataType in [ftSmallint, ftInteger, ftWord,ftAutoInc,ftLargeint] then Text:=IntToStr(Sender.AsInteger) else Text:=FloatToStr(Sender.AsFloat)end;
 
不好意思,今天才回复。刚才测试了这段代码,没有效果。发现Query1GetText不能被触发,debug发现:Query1.Fields.OnGetText := Query1GetText;这行能够执行,但Query1GetText里的代码却不能被执行,不知道什么原因,老大再帮看看,谢谢了!
 
兄弟哦 看看keylist 行吗?
 
还有一种方法,在DBGrid1的OnDrawColumnCell()事件里,自已画
 
znxia:我把定义OnGetText的代码放到query的afteropen中就可以了,但遇到新问题了,我原先在afteropen后对字段格式作了定义:TFloatField(ADOQueryGrid.Fields).DisplayFormat:=',0.00';,但现在这段代码实效了,虽然执行了,但格式不变。
 
procedure TForm1.Query1GetText(Sender: TField; var Text: String; DisplayText: Boolean);begin if Sender.AsFloat=0 then Text:='' else if Sender.DataType in [ftSmallint, ftInteger, ftWord,ftAutoInc,ftLargeint] then Text:=IntToStr(Sender.AsInteger) else Text:=format('%.2f',[Sender.AsFloat]) //类似于DisplayFormat:=',0.00'end;
 
if Sender.AsFloat=0 then Text:='';如果sender.asfloat<>0,那么text该是多少呢?你没有写,所以就默认为‘’了。
 
我测试过了,format('%.2f',[Sender.AsFloat]) 只是保留两位小数,"千分号"还是做不到。为什么我在QueryGetText只保留这一行代码,显示时单元格都变成“空”了? if Sender.AsFloat=0 then Text:='';是不是对所有数据类型都要做个判断?如果dbgrid单元格有其他数据类型(比如:string)怎么办,不可能都完全判断到吧?
 
我知道了ongettext必须完全转换为文本,太麻烦了。。。而且格式还是控制不好。。。
 
最终还是按照znxia的方法实现了,给分结帖。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部