怎样设置DBGrid某个单元格的属性,比如设置它办只读、前景色、背景色等,最重要的是能让它随着字符的增加而自动改变其行高,也就是像Excel那样,每一行的高度可以不一样,当然也可以不用DBGrid,最好是能接收SQL返回集的控件,但StringGrid的默认左边列好像去不掉,有点难看!希望哪位大侠能整点完整的代码过来,万分感谢!!好的控件也行!

解决方案 »

  1.   

    在Delphi中随意控制DBGRID每一行的颜色
         有个问题是在Delphi中使用DBGrid时,如何让DBGrid中每一行颜色按照用户自己的意愿控制。最初看到这个问题时,我们以为非常非常简单,所以马上动手准备解决它。结果却发现不是那么回事,传统方法根本不能发挥作用。在电脑面前一直坐到凌晨4点,不断地调试,幸运地是凭借平时积累的一点编程经验,终于找到了开门的匙钥。现将它充公,供大家享用。 1、 数据表的建立 2、程序设置;
    procedure Tinfo.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
            if query1.FieldByName(’all’).asstring>40’ then
            begin
                    dbgrid1.Canvas.Font.Color:=clred;
                    dbgrid1.Canvas.Brush.color:=clyellow;
            end
            else
            begin
                    dbgrid1.Canvas.Font.Color:=clblue;
                    dbgrid1.Canvas.Brush.color:=clyellow;
                    end;
     
            dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);
    end;
    在Delphi中锁定DBGRID左边列    我 在 使 用 Delphi 5进 行 数 据 库 编 程 的 时 候,希 望 DBGRID构 件 在 显 示 数 据 的 时 候 能 象 FoxPro的BROWSE命 令 一 样 , 锁 定 左 边 指 定 的 几 列 不 进 行 滚 动 , 请 问 应 用 什 么 方 法 来 实 现 ? 
        我们知道 Delphi的 TStringGrid有 一 个 属 性 FixedCols来 指 定 不 滚 动 的列 。 虽 然 TDBGrid不 能 直 接 使 用 这 一 属 性 , 但 通 过 强 制 类 型 转 换 也 可 以 实 先 这 一 功 能 , 因为 这 两 个 类 都 来 自 TCustomGrid类 。 下 面 我 们 以 Delphi 3.0的 Demos\Db\CtrlGrid为 例 来说 明 具 体 的 用 法 。 在 这 个 例 子 的 TFmCtrlGrid.FormShow过 程 中 加 入 如 下 一 行 :TStringGrid(DbGrid1).FixedCols := 2; 
    运 行 该 程 序 ,在 左 右 移 动 各 列 时, Symbol列 不 会 移 动 。 除 了 这 种 方 法 , 也 可 以 采 用 下 面 的 方 法 : 首 先 在 Form声 明 部 分 加上 type TMyGrid = Class(TDBGrid) end;然 后 在 TFmCtrlGrid.FormShow过程中加入: TMyGrid(DbGrid1).FixedCols := 2; 
    两 者 从 形 式 上 略 有 不 同 , 但 实 质 都 是 一 样 的 。 我 们 这 里 设 置FixedCols为 2, 这 是 因 为 在 DBGrid构 件 最 左 侧 有 个 指 示 列 , 如 果 你 将 DBGrid的 Options属性 的 dgIndicator设 为False, 则 应 设 置 FixedCols为 1。 
      

  2.   

    大富翁论坛版权所有
     KeyLife富翁笔记  
    作者: archonwang
    标题: DBGrid 应用全书(全面修订正在进行时) 
    关键字: 
    分类: 开发经验 
    密级: 公开 
    (评分:★★★★ , 回复: 29, 阅读: 5682) ?? 
       在 Delphi 语言的数据库编程中,DBGrid 是显示数据的主要手段之一。但是 DBGrid 缺省的外观未免显得单调和缺乏创意。其实,我们完全可以在我们的程序中通过编程来达到美化DBGrid 外观的目的。通过编程,我们可以改变 DBGrid 的表头、网格、网格线的前景色和背景色,以及相关的字体的大小和风格。
        以下的示例程序演示了对 DBGrid 各属性的设置,使 Delphi 显示的表格就像网页中的表格一样漂亮美观。
        示例程序的运行:
        在 Form1 上放置 DBGrid1、Query1、DataSource1 三个数据库组件,设置相关的属性,使 DBGrid1 能显示表中的数据。然后,在 DBGrid1 的 onDrawColumnCell 事件中键入以下代码,然后运行程序,就可以看到神奇的结果了。本代码在 Windows98、Delphi5.0 环境下调试通过。
    procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;State: TGridDrawState);
    var i :integer;
    begin
      if gdSelected in State then Exit;
    file://定义表头的字体和背景颜色:
        for i :=0 to (Sender as TDBGrid).Columns.Count-1 do
        begin
          (Sender as TDBGrid).Columns[i].Title.Font.Name :='宋体'; file://字体
          (Sender as TDBGrid).Columns[i].Title.Font.Size :=9; file://字体大小
          (Sender as TDBGrid).Columns[i].Title.Font.Color :=$000000ff; file://字体颜色(红色)
          (Sender as TDBGrid).Columns[i].Title.Color :=$0000ff00; file://背景色(绿色)
        end;
    file://隔行改变网格背景色:
      if Query1.RecNo mod 2 = 0 then
        (Sender as TDBGrid).Canvas.Brush.Color := clInfoBk file://定义背景颜色
      else
        (Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); file://定义背景颜色
    file://定义网格线的颜色:
        DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
      with (Sender as TDBGrid).Canvas do file://画 cell 的边框
      begin
        Pen.Color := $00ff0000; file://定义画笔颜色(蓝色)
        MoveTo(Rect.Left, Rect.Bottom); file://画笔定位
        LineTo(Rect.Right, Rect.Bottom); file://画蓝色的横线
        Pen.Color := $0000ff00; file://定义画笔颜色(绿色)
        MoveTo(Rect.Right, Rect.Top); file://画笔定位
        LineTo(Rect.Right, Rect.Bottom); file://画绿色的竖线
      end;
    end; 
      

  3.   

    StringGrid.FixedCols := 0;   //去除左右固定列FixedCols 
    FixedRows