是这个样子的:delphi+access;table1的结构:bianhao(编号)    
feiyong1(费用1)
feiyong2(费用2)以上三个字段为文本型(因为特殊需要只能如此)现在我想把每个编号的费用之和列出来显示在DBGrid1上,我就写了如下的代码:var
 str1:string;
....str1:='select kahao,sum(feiyong1+feiyong2)  from table1';   ADOQuery1.SQL.Clear ;
   ADOQuery1.SQL.Add(str1);
   ADOQuery1.ExecSQL;
     .............结果显示出来后各列之间的间隔相同。。这时候:1.我想改变某一个字段的间隔,我应该怎么做?
2.我想使sum(feiyong1+feiyong2) 这个字段的值变为红色,我应该怎么做?

解决方案 »

  1.   

    1、这种情况下字段间隔跟你建立库字段大小有关,必须使用代码进行更改,或者动态改变dbgrid的columns的宽度;
    2、为DBGrid1构件OnDrawDataCell事件编写响应程序:
      procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;Field: TField; State: TGridDrawState);
      begin
         if Table1.Fieldbyname(′Salary′).value<=SpinEdit1.value then
            DBGrid1.Canvas.Brush.Color:=ColorGrid1.ForeGroundColor
       else
            DBGrid1.Canvas.Brush.Color:=ColorGrid1.BackGroundColor;
         DBGrid1.Canvas.FillRect(Rect);
         DBGrid1.Canvas.TextOut(Rect.left+2,Rect.top+2,Field.AsString);
      end;
      

  2.   

    1:
     For i:=0 to GridName.Columns.Count-1 do
        GridName.Columns[i].Width:=35;
    2:
    str1:='select kahao,sum(feiyong1+feiyong2) as SumFeiyong from table1';procedure TForm.DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var
       AText:String;
    begin
      inherited;
      if Column.FieldName='SumFeiyong' then
      begin
        AText:=Column.Field.AsString; 
        DBGrid2.Canvas.Font.Color:=clBlue;
        DBGrid2.Canvas.Font.Style:=[fsBold];
        DBGrid2.Canvas.TextRect(Rect,Rect.Left+2,Rect.Top+
       (Rect.Bottom-Rect.Top-DBGrid2.Canvas.TextHeight(AText)) div 2,AText);
     end;  
    end;
      

  3.   

    动态改变dbgrid的columns的宽度,怎么改呢?
      

  4.   

    看上面:
     GridName.Columns[i].Width:=35;