如何改变 DBGrid中某列的值呢?(50分)

  • 主题发起人 主题发起人 AsStone
  • 开始时间 开始时间
A

AsStone

Unregistered / Unconfirmed
GUEST, unregistred user!
如根据DBGrid中的值判断,如果是“Y”,则改为“是”进行显示呢?
谢谢!
 
(3)改变数据在DBGrid中的显示:

select mobile2 as 电话,FNAME as 姓,LNAME as 名,
(case Limit when 2 then '管理员' else '普通用户' end) as 权限 from E_PEOPLE

以上语句在SQL Server 和 ORACLE中通过。在ACCESS中通不过。因为ACCESS的连接串用的Jet4.0 ,不能用SQLServer中的语法。

ACCESS(Jet4.0)中用:
'select mobile2 as 电话,FNAME as 姓,LNAME as 名,'+
' (iif(Limit=2, '+quotedstr('管理员')+','+QuotedStr('普通用户')+')) as 权限'
+' from E_PEOPLE';
 
我说的不是很清楚,是在DefaultDrawColumnCell事件中改变。
因为有可能这个值,是需要查询另外一张表,显示相应的值。
 
在相應數據集的字段的onGetText
如下://该事件时时响应
begin
if sender.value='Y' then text:='是'
else
text:=sender.value;

end;
 
谢谢jooo,能否详细些!再次感谢!
 
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.value<>'Y' then
DBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,Column.Field.asString)
else
DBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,'是');
end;
end;
 
procedure TForm1.Table1ziduanGetText(Sender: TField; var Text: String;
DisplayText: Boolean);//ziduan是相应的字段
begin
if (Sender as TField).Asstring = 'Y' then Text := '是'
else Text := (Sender as TField).AsString;
end;
 
打开QUERY,双击QUERY,把这个字段放添加进去,选中它,找到GETTEXT事件
begin
if sender.value='Y' then text:='是'
else
text:=sender.value;

end;
 
Query 是动态连接的,所以这些事件都没法获得。
 
这跟动态连接没有关系,你设计好,再关闭好了,又不是非要OPEN的。
 
同意张辉明的观点,你自己试一下
 
Query 是动态连接的
那你可以在afteropen中写:
DataSet.FieldByname('Field1').OnGetText:=Field1GetText;

procedure TForm1.Field1GetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
if (Sender as TField).Asstring = 'Y' then Text := '是'
else Text := (Sender as TField).AsString;
end;
 
后退
顶部