QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3038|回复: 0
打印 上一主题 下一主题

DBGrid的小用法!

[复制链接]
字体大小: 正常 放大
ilikenba 实名认证       

1万

主题

49

听众

2万

积分

  • TA的每日心情
    奋斗
    2024-6-23 05:14
  • 签到天数: 1043 天

    [LV.10]以坛为家III

    社区QQ达人 新人进步奖 优秀斑竹奖 发帖功臣

    群组万里江山

    群组sas讨论小组

    群组长盛证券理财有限公司

    群组C 语言讨论组

    群组Matlab讨论组

    跳转到指定楼层
    1#
    发表于 2004-12-8 15:10 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    <>var" C7 B* n+ |- ^) ~; _: H. a
      W1: array[1..8] of Integer;
    * p2 H" `8 C. v( k  W2: array[1..8] of Integer;</P>
    $ {% M% d7 P2 `<>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);
    4 W5 N0 s+ a) [: J: P3 d- Rvar1 Z0 L: h; n* m9 X3 s) x
      colwidth,Max:Integer;. y" T1 q% |7 X; ^8 s- V/ c  V. b& f
    begin
    - P* C6 q! d2 S  colwidth:=5;  ~& E% \0 g9 s% A7 K5 N1 w
      Max:=5;
    # m$ Y% j! K2 h1 {, Z3 e8 j  if not(Column.Field is TBlobField ) then6 n2 A0 a- m4 L, D
        Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName
    - c6 C: _0 o4 V- i+ g  else* `4 `7 v4 X5 g4 h& y) e
      begin
    : _8 w  Z0 V/ @' R/ E8 w    Column.width := max+50;' d+ C$ S! a3 x' H) Y1 ^" ]
        exit;/ I2 y8 e/ @: o" J& v% M9 S; M+ |) Y
      end;
    " j  y2 y: q( R$ P  j8 y# I9 |  with Tadotable(Column.Field.DataSet) do! `$ E5 f, b* B8 ?" ^
      begin9 |  }; E- t  a. o& L
         case number of: F1 t  ~* u; a+ c5 [9 ^
         1: begin
    & J- l0 W0 X# G7 {) p; N          case Column.ID of
    7 ]' p5 w- G1 r- ^* `+ I0 V          3: begin
    2 M& Y7 x' L2 ~- ], E6 d+ ?              if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    8 C5 }3 }* h2 `. r; R                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    : M7 S7 Z+ Q8 w5 T              else
    . T# [& O' ?4 L. _8 J( P2 @                 Column.width :=w1[3]*8+5;
    , C4 P9 u* @2 c! G/ H             end;/ s! |7 ?: F8 S- [$ ?- P
              4: begin
    3 ]- Z( P  @. I( [( e, m              if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then" j' O6 V4 g# y6 W4 |0 |1 |
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5+ b. R2 T, ~7 s1 R
                  else# {5 a: ]4 n& L3 \# ^
                     Column.width :=w1[4]*8+5;& z% ]- g& D0 W, P% S
                 end;: H* @; p! V8 _5 K) a, X
              7: begin& r1 U2 Y: ~1 G5 f) @+ r
                  if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then( `+ i5 N; ^$ Z& }) J# e
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+58 d+ @/ u: o" s+ X/ [: q
                  else
    , ~; E$ o- j# I9 e" |7 G! R6 k) l                 Column.width :=w1[7]*8+5;8 F. d3 |# w7 Z! x9 H2 o
                 end;
    % u; }" G. y4 K          else
    . N3 w5 ~, a5 x* y, ~             begin5 @# I; M8 k* H" H' B4 {
                   first;) V% M$ g. `2 v6 ~7 D
                   while not eof do
    ( p* h8 l* ~7 M+ I) `$ p9 u& Y0 j               begin
    1 Z$ M7 [$ v8 z3 o                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);9 {' N9 q9 h" [# }8 p
                      Max:=math.Max(colwidth,Max);3 f  x' k3 F5 u9 G1 b
                      Next;
    . y: i  w$ m9 h( C: A6 o' X               end;, w& |& i1 J( @( E/ Z3 f. |. ~
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    5 o9 \: U- F: R                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5# |1 X' i- s: I  o6 l7 h3 }/ Z
                   else
    ; J9 K. ]/ l  x  Z                  Column.width := Max+5;
    0 Z7 z, D; d1 o  V4 B8 ~6 O             end;) l; E2 N% j9 D% ?
              end;
    ; x2 b4 [% g* v  o1 q# J        end;. c" ]) f+ U5 ^0 h3 L8 c
         2: begin
      M$ G5 U1 `0 y  x6 I/ h          case Column.ID of
    ( R1 }1 G: i3 b* p0 [! y          4: begin
    ( ?4 d# i. S* ~/ _, x3 F              if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    & ^' q2 Z9 `$ U0 X7 {9 i                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ; B$ x8 S' |' j8 ?3 N# U              else8 [/ n1 I) w0 M5 q5 K& q+ `6 N
                     Column.width :=w2[4]*8+5;5 O- u+ I# y/ _% H0 u
                 end;" F( U6 _% i. z* j# ^
              5: begin4 ^, t# {4 j" s9 N& o  t
                  if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
      e3 Q6 I9 C" j: }                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ) f+ @8 L5 Y% R5 G  ^$ b* `              else( i' r6 d* y- k7 s& H% i
                     Column.width :=w2[5]*8+5;
    - l, I$ l& `  @" d             end;/ |' H! S: E  @# j, q
              6: begin
    ; t/ w, R7 U$ u6 O1 y/ Q              if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    . {; C: v" N7 Z9 {/ W* b% o% w                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ' r6 B" X. e! ?: ]7 j* u              else# k( z6 ]! X  E: r' \( r& i7 [% E5 a
                     Column.width :=w2[6]*8+5;" q4 a/ W, i5 i/ U
                 end;  u) N' x4 I5 C& e% b
              else6 ]# y# s7 h% v* @7 B  ]
                 begin3 j$ {( K- n  Y7 b" K. \  }2 G9 y
                   first;
    2 \3 R% i8 G2 p1 K6 c6 e+ s               while not eof do
    / ^; I& u$ o" s$ E6 y, b               begin
    - e( d4 {! h! J+ D                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);" _! D1 O) |6 _5 j
                      Max:=math.Max(colwidth,Max);
    6 [9 M  s& @% I' K                  Next;
    8 [/ y. s( [. P6 ^# N+ n" b               end;6 S9 V: y0 q$ a6 F0 v
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then) r7 r( Y0 v4 `. i
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5! o2 r0 q% V! M! [
                   else1 u  C2 G6 W4 l! \( T7 c- ~
                      Column.width := Max+5;/ Z2 J: e1 Y& a' R
                 end;
    1 l9 G) Z% A, D7 X' H3 J          end;9 N, p  K- I) d( A' o  U
            end;
    % e# Q4 `. _% X9 O, J, `# s: t7 f     end;
    - u3 |1 b" a  |  end;
    % E% D; a5 J/ f3 P) ?$ Q- rend;</P>
    . f% h8 ^8 z) q* u- z4 Z( [6 V<>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);
    % _" w2 u; A9 O4 S' p  \+ Tbegin+ ?4 h5 u' k, l, r6 a& g2 |* f
      Orderby(suiDBGrid2,Column,2);
    3 c7 Z( K3 h( l4 {# Eend;</P>9 F7 ?$ m6 T' z) g/ d, t
    <>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;
    . Q, |  M* a9 q2 N4 x2 [  const Rect: TRect; DataCol: Integer; Column: TColumn;
    & z) O7 ^) e# F  State: TGridDrawState);
    . j1 ]9 E3 M2 ]var# c' C( o, n( X( A; c4 B
       DrawString : String;" {4 }% X2 l  q' \
       sys:TSysOper;9 t2 t( m- W& M" }) \8 ?
    begin! B6 g2 P0 W; V! @- }
       if (gdSelected in State)then% x& x; O: F( }8 w
       begin- k: ~. |3 _4 @
         suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色
    7 j5 B. V5 L& j; z- O& D8 n   end$ G* D9 k% e: ?8 p+ V' r0 O4 b0 f
       else
    8 l1 N; X# i, l: a+ V. ]6 K     suiDBGrid1.Canvas.Brush.Color:=clWindow;
    ! _5 D5 Y& D5 D4 B' f" ?   sys:=TSysOper.Create;" x  ]7 B8 ~) S; u- D4 `
       try2 D' \) V  k  K
         if Column.Field.IsNull=false then
    9 o" E5 y1 J7 q; m# D/ M; O     begin
    9 l" ^$ }7 Y9 ?; b; T% s. }       case DataCol of( I' X2 E& C: i) s9 p1 L7 ]0 R
           3: begin  I" o8 Y, i' }; E3 H+ C
                DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。# I, i7 I' F0 p, p/ P% \
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);$ ~4 s* X% V$ ^' l+ ~/ l) ~$ y0 h
                w1[3]:=math.max(Length(DrawString),w1[3]);
    . s9 f7 q% w- h" s% p( @6 l4 y! }          end;7 f$ R4 f/ i. z9 r% o3 `( H
           4: begin! w* e: x/ m% A9 Y" T: O
                DrawString:=sys.getLoginMode(Column.Field.CurValue);
    0 N4 p5 z$ O! o) k; V) O$ T- W* C: A            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    + S' U0 _" {3 W! `1 z5 k" O2 m            w1[4]:=math.max(Length(DrawString),w1[4]);
    % A7 p7 J2 n- z+ U( f, }          end;) H7 l) C3 {( R" d3 X0 c3 Q
           7:begin# z  E# y; C0 }9 ^
                DrawString:=TimeFormat(Column.Field.CurValue);- T  @$ C. c8 Q1 O+ R$ l
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    : ]- Q  B, l4 a( a            w1[7]:=math.max(Length(DrawString),w1[7]);, ^+ n3 b" B8 U3 Y
              end;4 o8 G0 X1 `7 V3 _: E  S& ], v; B
           else
    6 p* S4 F3 A0 o9 `0 C          suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    6 N1 @" W2 S4 m/ k* [, x* E       end;) ~9 J* s, g/ v+ N* T2 z0 V
        end
    * w* k, b3 N! [  M8 M    else
    + U/ q& f6 G% s       suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);3 A8 M& v5 Y! a4 g. |
      finally( \& n* G8 A2 K1 v7 |
        sys.Free;) u/ b' g- |6 y
      end;2 O% B7 R( t$ A5 n# [4 I8 [5 Z
    end;</P>7 T# l9 Z& [) j
    <>上面是操作DBGrid的两个事件的的例子!Orderby函数起到了一个点击标题排序并调整cell的大小使得显示完全的作用,这里在DBGrid的DrawColumnCell事件中加入将一些想将数据库中的内容换一种显示的方法,DrawString就是要显示的字符串,采用suiDBGrid1.Canvas.TextRect函数重画。这里是根据cell的ID号进行的重画,如果DBGrid是不能拖动的不会出问题,如果要实现拖动,还要动态取得cell的ID号!</P>
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-20 09:56 , Processed in 0.283370 second(s), 51 queries .

    回顶部