線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:898
推到 Plurk!
推到 Facebook!

DBGrid的数据显示问题!!!

尚未結案
com0922cn
一般會員


發表:3
回覆:2
積分:1
註冊:2004-11-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-26 19:28:56 IP:218.79.xxx.xxx 未訂閱
兄台们好: 在我的数据表中有一个字段为TinyInt型,该字段的值为0或1;在DBGrid中对应该字段的部分我打算显示的数据为:字段0值对应为“禁用”;字段1值对应为“启用”!请问该如何操作? DBGRID -> DATASOURCE -> ADOQUERY , DBGrid 的内容要求随着 DATASOURCE 自动更新!!!谢谢……
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-26 21:11:07 IP:220.135.xxx.xxx 未訂閱
Hi com0922cn 兄你好, 試試這個:
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
var Canvas: TCanvas;
begin
  Canvas := (Sender as TDBGrid).Canvas;
  if (Field.Index = 0) then begin         if (Field.AsString = '0') then begin
        Canvas.Brush.Color := clRed;
        Canvas.TextOut(Rect.Left,Rect.Top, '禁用');
     end;
     if (Field.AsString = '1') then begin
        Canvas.Brush.Color := clGreen;
        Canvas.TextOut(Rect.Left,Rect.Top, '啟用');
     end;
  end;
end;
我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
com0922cn
一般會員


發表:3
回覆:2
積分:1
註冊:2004-11-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-26 22:37:04 IP:218.79.xxx.xxx 未訂閱
Miles 你好: 我试过了!在填充DBGrid1时下述事件无法触发! procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); 但是下面这个事件却可以被触发! procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); 为什么?针对这个事件代码又该如何编写? 谢谢……
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-27 09:13:34 IP:202.62.xxx.xxx 未訂閱
您好﹗    試試如下的方法于DBGrid元件的OnDrawColumnCell事件中﹕
Var
  Str : String;
begin
  if SameText(Column.FieldName, '欄位名稱') then
  //上句欄位名稱請代入此TinyInt形態欄位的名稱
    begin  
      Str := '';
      if Column.Field.AsInteger = 0 then
        Str := '禁用'
      else
      if Column.Field.AsInteger = 1 then
        Str := '啟用'
      if Str <> '' then
        begin
          DBGrid1.Canvas.TextRect(Rect, Rect.Left 2, Rect.Top 2, Str);
        end;
    end;
end;
========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-27 11:42:39 IP:61.31.xxx.xxx 未訂閱
Hi com0922cn 你好: 那段程式碼, 我是測試後才放上的, 應該沒問題, 是不是Field.Index = 0沒做修改, 看你的Field是第幾個設定一下即可, 這個例子我是取第一個欄位. 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
com0922cn
一般會員


發表:3
回覆:2
積分:1
註冊:2004-11-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-27 15:08:49 IP:218.79.xxx.xxx 未訂閱
多谢二位, Miles 兄的 TextOut 方法不能覆盖 DBGrid 中原本显示的数据, cashxin2002 兄的 TextRect 方法则可以。那么请问 OnDrawColumnCell 事件和 OnDrawDataCell 事件具体有什么区别呢?
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-28 09:58:38 IP:202.62.xxx.xxx 未訂閱
您好﹗    DBGrid元件的OnDrawColumnCell事件是指當應有程式需要繪制DBGrid元件的某個 欄位時引發的事件﹒DBGrid元件具有自動重繪預設內容的功能﹐是由其 DefaultDrawing屬性控制的﹐當DefaultDrawing屬性值為True時﹐DBGrid就會自 動以預設值重會每個Cell﹐然后再引發OnDrawColumnCell事件﹐相反的﹐若屬性 值為False﹐則不會有自動重繪的功能﹐而是直接引發OnDrawColumnCell事件中 的程式﹒ OnDrawDataCell事件使用得比較少﹐參考了一下Help﹐對這兩個事件的比較是這 樣寫的﹐相對而言﹐似乎更贊成使用OnDrawDataCell事件﹒ OnDrawDataCell事件 Do not write an OnDrawDataCell event handler. OnDrawDataCell is obsolete and included for backward compatibility. Instead, write an OnDrawColumnCell event handler. OnDrawColumnCell事件 Write an OnDrawColumnCell event handler to provide customized drawing for the data in the cells of the grid. Draw on the cell using the methods of the Canvas property. ========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
系統時間:2024-06-02 0:24:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!