DBGrid中的数据显示问题?(200分)

  • 主题发起人 主题发起人 elton_kl
  • 开始时间 开始时间
E

elton_kl

Unregistered / Unconfirmed
GUEST, unregistred user!
在DBGrid中显示Table中的数据,其中Table中有一个为Integer的字段,如果其值小于0,则以汉字方式在DBGrid中显示,比如显示内容“该值不存在”,该如何做?
 
这恐怕不行。Table中有一个为Integer的字段,显示内容“该值不存在”是字符
型的。类型不兼容。Table联到DBGrid时,字段类型已确定。
也许是我功力不够。
 
如果必须如此,可以考虑使用stringgrid。
 
做个计算字段,将integer 转成String, 在重绘Dbgrid
 
如果用query控件则可以用sql 语句来实现,!!
 
Use TField.OnGetText Event:

procedure TForm1.Table1IntegerFieldGetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
if Sender.AsInteger<0 then
Text:=该值不存在'
else
Text:=Sender.AsString;
end;
 
不用那么麻烦,用 TField的 OnGetText 事件,参考一下吧:
procedure TForm1.Table1SIZEGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
if (Sender as TField).AsInteger > 20 then Text := '好大的鱼'
else Text := (Sender as TField).AsString;
end;
 
(嘿嘿,为了分,写详细些。)
你在该字段的 OnGetText 中这么写:
procedure TForm1.Table1SIZEGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
if (Sender as TField).AsInteger < 0 then Text := '该值不存在'
else Text := (Sender as TField).AsString;
end;
 
我试过了,Crab的方法确实可以
 
在字段编辑器中定义一个新的字段部件,名为TempDisplay,
将其类型改为 String 类型,并选中Calculated 检测框。
在字段编辑器中选中新建的字段,在Object Inspector中双击
OnCalcFields 事件,并添加相应的代码:

if(Table1YourColumn.AsInteger < 0) then
TempDisplay.Value = '该值不存在'
else
TempDisplay.Value = '该值存在'
 
To Crab:
難道我上面提的方法有問題嗎?好像跟你的方法差不多,但比你的還要前!
 
奇怪,我记着当时我回答问题时,没见到你的贴子啊,所以我才会说:“不用那么
麻烦。”

大富翁里记载的发贴时间是哪里的时间?难道是发贴者本机的时间?怪事。。。

elton: 把分给 Calvin 吧。
 
to popeye:
你记得当时的情况吗?到底哪个贴子在前呢?
 
To Crab:
我不是這個意思,我當初還以為我寫的程序有點問題,所以才這樣說。
 
又学了一招.
 
我也来凑凑热闹,不求分数,只求共同进步
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if Column.FieldName = 'demo' then //这里假定字段为demo
begin
DBGrid1.Canvas.FillRect(Rect);
if Column.Field.AsInteger>0 then
DBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,Column.Field.asString)
else
begin
DBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,'该值不存在');
end;
DBGrid1.Canvas.DrawFocusRect(Rect);
end;
end;
不过这个方法不完美
显示有一圈虚框,不知哪位能解决
 
To:箭头
将下面这句去掉试试
DBGrid1.Canvas.DrawFocusRect(Rect);
 
一句话提醒梦中人,非常感谢烂泥,DBGrid1.Canvas.DrawFocusRect(Rect)是用来在
表格中画图的,真是画蛇添足
 
烂泥说的对,
做个计算字段即可.
如:为f1增加一个计算字段calcf1,
在oncalc..中:
if(Table1f1.AsInteger < 0) then
calcf1.Value = '该值不存在'
else
calcf1.Value = '该值存在'

好像不用考虑dbgrid等的重画问题.
 
用 箭头 的方法最好
 
后退
顶部