我用的连接数据库的方式是
ADOConnection+ADOQuery+DataSource+DBGrid
用ADOQuery发送sql命令执行对数据库的操作
现在需要对字段名进行重绘,为了实现下标的显示
在DBGrid的属性里设置了部分列的fieldname和title的caption属性,现在要通过drawdatacell事件来对字段名的字体进行设置程序如下:
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
var
     value:String;
     lp,i,FontSize,h:Integer;
begin
     if Field.Name='分子式' then
     begin
          lp:=1;
          value:=Field.AsString;
          with DBGrid1 do
          begin
               FontSize:=Canvas.Font.Size;
               for i:=1 to Length(value) do
               begin
                    if value[i] in ['0'..'9'] then
                        Canvas.Font.Size:=FontSize -3
                    else
                         Canvas.Font.Size:=FontSize;
                   Canvas.TextOut(lp,Rect.Bottom-Canvas.TextHeight(value[i])-1,value[i]);
                   lp:=lp+Canvas.TextWidth(value[i]);
               end;
          end;
     end
     else
          DBGrid1.DefaultDrawDataCell(Rect,Field,State);
end;但是当我在dbgrid里面设置过fieldname后就不进入这个过程,如果不设置fieldname会一直在执行这个过程,但是Field.Name一直为'',请问该如何解决这个问题

解决方案 »

  1.   

    Field.fieldName我试过,找是能找到那一列,但是好像改的还是数据,就是value:=Field.AsString;
    取的不是分子式比如H2O的值而是里面的数据比如30(是百分含量)
    这段代码是别人告诉我的,但是一直没有试成功,如果有高手请指教
      

  2.   

    改为在DBGrid1DrawColumnCell事件里写,因为你要判断字段名
      

  3.   

    你最好在fieldname属性设为空!
    用 if fieldname='' then 来判断,因该是没有问题的!
      

  4.   

    问题还没完全解决不过只差最后一点了,请高手看一下
    http://community.csdn.net/Expert/TopicView1.asp?id=3257611