DBGIRD的标题头的中文显示(50分)

  • 主题发起人 主题发起人 unixhost
  • 开始时间 开始时间
U

unixhost

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是动态查询,在dbgird中要显示的字段不确定。
我用的是select selectstr from table1
(在这里selectstr是个变量)
由于在表中的字段都是字母表示,如name(姓名),它在
DBGRID的题头就是name,但我想用中文表示。
我用了下面的方法
for i=0 to...
if dbgrid1.Fields.displaylabel='name'then
dbgrid1.Fields.displaylabel:='姓名';

或者
if dbgrid1.Column.title.caption='name'then
dbgrid1.Column.title.caption:='姓名';

把此语句加在dbgird的ONEnter事件中
我试验成功过,可是照这方法用在另外一个地方时怎么都不能
变过来。
这会是什么方面的问题。

 
>>我试验成功过,可是照这方法用在另外一个地方时怎么都不能
变过来。具体一点。

注意:selectstr变量的大小写
 
另外一个地方指什么?
如果不执行
if dbgrid1.Column.title.caption='name' then 返回为False

单步跟踪一下
 
你应写为
if dbgrid1.Fields.fieldname='name'then
dbgrid1.Fields.displaylabel:='姓名';
如是动态付值,你最好用对照表,如用判断语句太麻烦
 
在Query1AfterOpen中写,我试成功了。
 
你可以用field来确定你想要的字段然后就可在。
针对相应的字段的名称来定义你的title的属性。
 
在selectstr理想想办法,你看行不:
将其中每一列改为如下格是:colname as displayname
 
还有一个简单方法,就是预先在你的query中输入包含你所有可能动态产生的字段的
sql语句,然后双击DBGrid添入所有字段,最后将他们的Title全部改为中文就OK了,当然如果出现没有包含的字段那么它还是英文字段。
 
在你在变量中
selectstr=英文字段 as '中文标题'
 
如果是动态的 select 语句,字段名无法事先知道,则可以用一个对照表,
一边是内部字段名,另一边是显示名,然后,一个个查找 title的 caption,
用对应的中文名代替。
 
Crab:

对照表应放在哪儿? 程序、数据库或其它地方?
 
为何不用中文字段名呢?
 
对照表如何做,如何用
 
因为是动态查询,在dbgird中要显示的字段不确定。所以DBGrid的Columns对象的集合不确
定。也就是Column与数据库表中的字段不是一一对应关系。因此你循环的i终值应该是动态
查询的字段数(Query的字段数)。
对照表是一个数据库表,格式:
EFiledName CFieldName
name 姓名
sex 性别
......
动态查询显示中文Title:查询表Query1,对照表Table1
实现:
var
selectstr: string;
i: integer;
iend: integer;
begin
iend := DbGrid1.FieldCount;
For i:= 0 to iend - 1 do
begin
s := DBGrid1.Columns.FieldName;
Table1.First;
While not Table1.Eof do
Begin
if Table1EFieldName.Value = selectstr
then DBGrid1.Columns.Title.Caption:= Table1CFieldName.Value;
Table1.Next;
end;
end;
end;
 
接受答案了.
 
后退
顶部