QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3114|回复: 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
    ' v, L/ Q* S8 u& m7 G+ g  W1: array[1..8] of Integer;2 J6 I4 e* G2 o- x6 r1 Z
      W2: array[1..8] of Integer;</P>2 p; Y* W& B) r4 b
    <>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);2 z4 c( W- u: [6 @2 H) W
    var
    6 H* }( x8 G# X6 ~6 F: j5 f6 o4 y  colwidth,Max:Integer;! |, E# G& U4 r9 ^
    begin
    - j9 E6 R8 f' Z' C' Y  colwidth:=5;2 j; E' y6 Z+ c9 O3 Q' p8 @7 Q6 l' o
      Max:=5;+ x8 T4 a1 a% t* i; \" o
      if not(Column.Field is TBlobField ) then
    0 B4 i, `0 h# i9 b( d# P    Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName  r: Q5 S3 h- y* W* g+ |( l( P6 E, @. D
      else
    5 \! V& q: d/ I9 t/ V  begin
      M  V7 g- t; G4 W" P! s$ i    Column.width := max+50;) z# Z4 L: D& z- D1 e
        exit;
    0 O- J3 [. @: c2 B. g# C9 x; }  end;+ {1 o7 h1 ~1 t& B
      with Tadotable(Column.Field.DataSet) do
    ; [, u* q5 c+ T$ g2 q- D) n  begin) x3 h# D0 }  l
         case number of2 o" Q! _9 k- w, {
         1: begin
    + |) V7 Z3 e" m$ g$ W          case Column.ID of% @: W% G# S4 s/ g' b
              3: begin
    5 p; P8 \+ f; Q" Y( V0 c# B. D5 }              if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    / S4 V/ Q) t/ A  g% n( P' y                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+58 _! n& n  [, B: \
                  else
    + r: d( X$ L* _  B+ q4 Q                 Column.width :=w1[3]*8+5;
    8 ~) c* |* G- |             end;
    6 q; N$ m3 g* y- g" W" ?: S0 o          4: begin
    - U1 H+ @$ G" V; h: N6 R3 ^4 [              if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then' K" b1 Z. G+ `6 Q9 w- u* e
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    # a" x3 o/ Y. s9 _: O. V  J. }              else/ H, Y' [/ N& h% Q5 M
                     Column.width :=w1[4]*8+5;
    & w. g; ]+ z% o5 |! \             end;: ~8 D3 L1 {& W! j- }
              7: begin, x5 y. L( k1 n% L! S
                  if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then$ x) |, b) Q# c$ I; @* l
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    & }& F% y. Y& y( c1 J4 M! l) M              else4 @% M' B! n* a1 p$ `8 ?% `( b; {* K
                     Column.width :=w1[7]*8+5;
    ! |0 m  P( w, z" u5 N$ L) x! U             end;
    - [% w8 F2 v2 B          else
    ' v& `) t4 ^0 a             begin
    : c& o' g2 R/ f( y" W: y: ]5 B8 o" i               first;- I* E$ t+ L# F; x" C
                   while not eof do
    7 i) V! u! l$ G7 a+ K               begin8 Q2 a8 Y% I6 D4 B, P$ ^7 C4 U5 I
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
    - T: x% r; s6 v                  Max:=math.Max(colwidth,Max);
    * B, A. g; {" m                  Next;
    # ^" ?2 H) i% R1 X& y6 Y0 ^: y               end;
    6 l( A4 Q6 f  I# E: ^7 s4 @               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    7 ]" G8 U4 Q  j' A* ?6 ?! d                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    8 Z  G8 \9 ^% M& R; c1 o% ~- O               else
    2 F6 @" s4 y7 K; _! j2 {$ `                  Column.width := Max+5;+ T3 W5 I/ g' D( I2 f) ~/ e
                 end;
    3 F, _4 f1 v: U1 @8 c          end;6 S- X; r. g4 a/ }/ ?+ G' S& o9 k
            end;
    . t) r0 C* s5 L, |& t; \, R. J     2: begin
    : ~# ]2 \8 y4 {1 y% Z          case Column.ID of
    1 F  W) C! @+ X( n2 Y8 A          4: begin8 u0 P1 d) _/ c+ O6 r
                  if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then7 X" `  w& f2 w; x
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    2 s! h- H* d7 m8 ^              else
    / Y6 [  g6 j( J2 j                 Column.width :=w2[4]*8+5;" p8 X* w# F5 l3 V) \* v2 V- I
                 end;
    , W/ j, M+ E' y( m4 C1 \          5: begin
    6 L% W) G( o' w              if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    - S! q- k. @; O                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5  R5 n1 v5 T; S. \* J
                  else' @8 o" `( T7 F' S5 i. Z6 @
                     Column.width :=w2[5]*8+5;
    " [* m- [6 @3 D9 o: J- j             end;7 ~3 P7 `3 |7 n5 R% L! V7 U4 M( Q
              6: begin
    4 P7 w2 G1 |1 _. \              if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then( O- x9 V) \& W. T0 t
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5. K: z5 d' _) o: b! h" r
                  else1 V/ w9 m$ n! h2 B
                     Column.width :=w2[6]*8+5;( \' K" F% u& L! i* p, `: l- v
                 end;
    " I4 T( _/ A$ e' o( v9 K          else& G& ~* ]$ x# ^  N6 r" ^8 |
                 begin. \! J/ |2 V5 H5 Y8 l
                   first;
    % b  }/ o0 P7 p) U' l               while not eof do* g1 @8 T. u/ ?, J; c3 [; }( U
                   begin6 K8 S- s8 X/ b; X- f
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
    % o4 u1 _# X! d" d                  Max:=math.Max(colwidth,Max);
    $ A( m& Y. ^% R$ G5 m                  Next;
    ' s- c5 W6 ?3 P; [0 @7 {               end;0 b( J3 T+ ~) ?2 E
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    + x! p! O) \- A                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5- e' M4 N; k0 u3 E. j
                   else; _- B6 `  Q1 c
                      Column.width := Max+5;
    0 R; E/ A4 h$ V, j1 E! h; q3 b             end;0 _0 Z) }8 I5 f8 b1 U
              end;2 i; k& e  ~- c+ E& {$ H# w
            end;: X- g( q) j, L2 h
         end;+ u3 F0 d9 f# K! J3 F9 Q& @
      end;2 i  W  j+ p, J  B0 Y: l# V
    end;</P>
    % U0 Y! ?% u1 I8 w# h( F<>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);% S2 a& \2 E) A; L
    begin2 R5 f2 H) {  b3 r( h! G; p
      Orderby(suiDBGrid2,Column,2);2 Y, e! a) Z3 G7 N
    end;</P>  T$ i# @6 w9 w: ]# |
    <>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;
    ; x% l& P) C# m7 f; r& C  const Rect: TRect; DataCol: Integer; Column: TColumn;3 t, X/ h" [& o3 n
      State: TGridDrawState);, s2 J' [0 Z+ S6 n
    var( |+ D  Y  k* t1 e% g) ]! e
       DrawString : String;& _; I6 X9 i& X6 O$ @8 s( }6 h
       sys:TSysOper;
    2 F5 i( ^( s  `1 nbegin/ u* C+ `! y. u, W: R2 j6 \
       if (gdSelected in State)then
    , m2 c$ w/ d$ }. `   begin
    . k# l0 l7 {' K     suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色
      |6 v! H+ b% ]. h: m$ T   end
    7 T/ l) l4 P" H) B- O7 |4 s   else
    # T5 e3 B  T5 C     suiDBGrid1.Canvas.Brush.Color:=clWindow;
    5 W6 O( r0 E- r6 g6 y; e( T( e! k   sys:=TSysOper.Create;9 E: _, k; e* S7 |- L' P1 @8 ]
       try3 Z4 g$ Q; H' a& I
         if Column.Field.IsNull=false then
    2 f, Y( `+ `% E& L; J     begin
    # O& X7 g! j  [7 u; \: f' H! n% J       case DataCol of
    0 ]7 Y0 z" f/ Y       3: begin: F* |; }9 E6 x( ]7 j, Q! t( W: X& X
                DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。& x" ^4 y% s: A% i: O4 y
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);8 b. X6 Q4 C# ~: j/ [/ e* U% u
                w1[3]:=math.max(Length(DrawString),w1[3]);
    0 |1 H, Y' G4 l, J# S  q6 s( q; _          end;1 U1 n3 s* ]  K  u, P4 q
           4: begin/ g/ K% w; q3 ^0 c0 P: \2 R/ y
                DrawString:=sys.getLoginMode(Column.Field.CurValue);
    9 |# f9 b/ V  T4 A- f5 Y1 Z            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);6 }( w+ g! R& C6 G2 p! ~
                w1[4]:=math.max(Length(DrawString),w1[4]);
    . x( u7 U& M( I. g          end;$ w" h* J% k8 @5 E1 r& _' O5 ?1 C. Q
           7:begin
    . v& f! ]2 O# ?( r) t: q( c: _            DrawString:=TimeFormat(Column.Field.CurValue);
    ! `5 f2 Y# h9 ?4 b7 x. f# u: B            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);  t! _9 n8 L( b1 ]* |/ [* O3 _
                w1[7]:=math.max(Length(DrawString),w1[7]);2 S* ]+ m" X0 ^: |( H( M6 m1 |- k
              end;
    $ e  s3 w3 o* V; U       else5 C8 U( ]( W. v! G% e
              suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    ! J! `, D  q& A0 P; K1 m) Z% C1 k       end;0 Z, E+ b# q) c
        end
    " p  V( i+ r' f) V8 Q6 \/ S/ X    else: N! g) S' o. _: D
           suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    . I& R* D5 B7 Z4 o* d' _  finally
    2 ^2 b' @: C: M; a8 e! B    sys.Free;
    ! v- Z; S7 p1 E* ^  end;; i* o2 P* S# a: a: c4 ]
    end;</P>
    ( x: ?0 H- {) v* N  ?" 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-10-24 02:35 , Processed in 1.487539 second(s), 51 queries .

    回顶部