dbgrid中数据的显示问题(50分)

  • 主题发起人 主题发起人 套牢1
  • 开始时间 开始时间

套牢1

Unregistered / Unconfirmed
GUEST, unregistred user!
1、请问如何在grid中显示固定小数位数的float;
比如我希望显示'45.00'可是grid总是自动地把那些零去掉,有谁能帮忙解决???
2、如何在grid中实现象edit中密码方式的输入,但要求当该cell获得焦点时,原始数据
自动出现,失去焦点是自动变成'*****'(我用colenter和colexit事件来配合,怎么也
达不到效果,一旦在同列移动光标则无法触发事件,怎么办???)数据库是sql server
ado 连接!!

 
呵呵,今天刚回答过这样一个问题:)——
给相关字段加一个自定义的OnGetText事件(在Form的定义部分):
private
procedure NumToText(Sender: TField; var Text: String; DisplayText: Boolean);
在ADOTable打开时关联该事件:
procedure TForm1.ADOTable1AfterOpen(DataSet: TDataSet);
begin
ADOTable1.FieldByName('floatfield').OnGetText := NumToText;
end;
根据显示和编辑的不同状态调整数字的显示:
procedure TForm1.NumToText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
Text := FormatFloat('##.00', Sender.AsFloat);//关键是第一个参数里的.00,强制显示后面的0
if DisplayText then Text := StringOfChar('*', Length(Text));//如果是浏览状态就全部显示*号
end;
 
什么时候定义这个displaytext的值,你说的有点高深了,我看不大懂,能解释清楚一点吗?
 
直接在dbgrid的字段的displayformat中设置成#.00就行了,具体可以看帮助。
第二个问题不会。
 
这是系统传给你的参数啊,你不用管的,只管判断就行。
你在OnGetText上按F1就知道了:)
 
呵呵,YNTW说的也不错,我是为了简化两个问题所以写在一起了。
提醒一点,用DisplayFormat的时候要用一个强制类型转换,即——
TNumericField(ADOTable1.FieldByName('floatfield')).DisplayFormat := '#.00';
 
那好吧,我正在杀毒,明天试后在给各位回话,谢谢!
 
你们好,现在有结果了.
第一个问题已经解决了,但对于问题2还有点小毛病.
我按照dq的方法试了一下,编译没有出错,但在运行时,该列数据显示不出来.
因为我的query是长期open的,grid的dgedit:=true;dgAlwaysShowEditor:=false;
不知是什么原因?
 
刚才每说清楚,再补充几句.
ADOquery1.FieldByName('单价').OnGetText := NumToText;
这句话是调用该过程,可是我运行时若在NumToText中加入一个断点则好象程序
永远也跳不出来似的,若不加则可以正常运行.
在grid的指定field中输入数据时可以看到,一离开则没了.
用grid来显示数据库的数据则不显示,为一片空白.
问题在那里,另程序是在adoquery1 open 以后一直调用该afteropen事件吗?
 
>>ADOquery1.FieldByName('单价').OnGetText := NumToText;
>>这句话是调用该过程
这句话并不是调用,只是关联;真正的调用是当DBGrid需要显示每一格数据的时候触发的,
所以“若在NumToText中加入一个断点则好象程序永远也跳不出来似的”,因为你设断点的时候
肯定是在IDE里,一旦设好断点之后再Run,DBGrid所在的窗口必然要刷新,因为它是从不可见到可见了;
从而导致DBGrid跟着刷新,所以不断地触发OnGetText事件,肯定是出不来的:)
——也就是说OnGetText不是AfterOpen调用的而是DBGrid刷新触发的,AfterOpen里只是关联。

不过按你的设置也应该没问题啊,我试过了。
要不你把你自己的NumToText函数里的内容贴出来看看有什么差异?
 
各位大侠:小弟知错了.错误在我自己身上,我把
Text := FormatFloat('##.00', Sender.AsFloat);
注释掉了,我愿意为它只是起限制格式的作用,其实他还是赋值操作.
不好意思!!!
我对高手的景仰有如滔滔江水,绵绵不决,又象......
thank you!
 
呵呵,客气客气。大家都有走眼的时候嘛:)
 
后退
顶部