有关字段显示转换的问题(100分)

  • 主题发起人 主题发起人 linsh
  • 开始时间 开始时间
L

linsh

Unregistered / Unconfirmed
GUEST, unregistred user!
环境 98 c/s oracle delphi
库表中有一个字段的长度为一个字节,它的值一般为1 2.....9 ,我想在它的值为1....9时
在DBGrid的对应字段显示与1....9对应的两个汉字.怎样实现?

注:
与1....9分别对应的汉字没有放在别的表中
 
用listview可以控制格式,把它的style设为report型,然后把表中的数据一行一行的添加
进去,其中findsthq为一个tquery
with Main_ywDm do
begin
findSthQ.Close;
findSthQ.Sql.Text:='select * from kxhdj where jgh=:s_jgh and sj between :s_start and :s_end order by km,km_2,sj' ;
FindSthQ.ParamByName('s_jgh').Asinteger:=strtoint(trim(MainFrm_yw.Label5.caption));
findSthQ.ParamByName('s_start').Asdatetime:=ss_start;
findSthQ.ParamByName('s_end').Asdatetime:=ss_end;

findSthQ.Prepare ;
FindSthQ.open;

//添表
listview4.Items.Clear;
label28.Caption:='共有:'+inttostr(FindSthQ.RecordCount)+'条记录';

while not FindSthQ.eof do
begin
with listview4.Items.Add do
begin
ss_temp:=inttostr(FindSthQ.fieldbyname('zh').Asinteger);
caption:=copy('000000000'+ss_temp,length('000000000'+ss_temp)-8,9);
subitems.add(FindSthQ.fieldbyname('mc').Asstring);
subitems.add(FindSthQ.fieldbyname('zy').Asstring);
//余额方向
if FindSthQ.FieldByName('zjbz').Asstring='0' then
subitems.add('借方');
if FindSthQ.FieldByName('zjbz').Asstring='1' then
subitems.add('贷方');
if FindSthQ.FieldByName('zjbz').Asstring='2' then
subitems.add('借或贷方');
//帐户类型
if FindSthQ.FieldByName('zhlx').Asstring='0' then
subitems.add('基本存款户');
if FindSthQ.FieldByName('zhlx').Asstring='1' then
subitems.add('一般存款户');
if FindSthQ.FieldByName('zhlx').Asstring='2' then
subitems.add('表外科目户');
subitems.add(datetimetostr(FindSthQ.fieldbyname('sj').Asdatetime));
subitems.add(FindSthQ.fieldbyname('czy').Asstring);
end;
FindSthQ.next;
end;

listview4.SetFocus ;
button13.Enabled :=true;
end; //end with
end;
 
为何不响应字段的OnGetText事件呢?
 
是呀——
procedure TForm1.FormCreate(Sender: TObject);
begin
Table1.Fields[1].OnGetText := OnGetText;
end;

var
NumText: array[1..9] of String = ('one', 'two', 'three', 'four', 'five', 'six',
'seven', 'eight', 'nine');

procedure TForm1.OnGetText(Sender: TField; var Text: String; DisplayText: Boolean);
var
Index: Integer;
begin
Text := Sender.AsString;
try Index := Sender.AsInteger;
except Exit;
end;
if Index in [Low(NumText)..High(NumText)] then Text := NumText[Index];
end;
 
使用ORACLE的DECODE函数如何?
SELECT DECODE(FieldName,1,'one',2,'two',3,'three',FieldName)
FROM TableName
WHERE ...
 
在dbgrid的OnDrawColumnCell事件中写代码,如下
if Column.Fieldname='your_FieldName' then
begin
if Column.Field.AsString='1' then DbGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,'第一');
if Column.Field.AsString='2' then DbGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,'第二');
end;

 
谢谢各位.
 
后退
顶部