QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3072|回复: 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
    7 ]# E6 K; K$ j) A  W1: array[1..8] of Integer;+ i$ S$ Y  Q5 W* I) k+ T
      W2: array[1..8] of Integer;</P>, Y/ ~2 t2 n7 e/ w
    <>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);! s* _  J: l# k1 ?9 m9 @% ?
    var' E+ N# ^3 e% ~
      colwidth,Max:Integer;
    - J  `3 }  x6 H7 u- o6 Bbegin: P; d/ ?' u5 }) [5 t9 W
      colwidth:=5;, H  x3 |* k. n9 `2 @& H3 y9 T
      Max:=5;; q7 p7 M; W& g+ R; g
      if not(Column.Field is TBlobField ) then
    6 a$ z: C4 t' ^% v, E- f    Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName1 T* c8 d9 R* ]% c0 t5 N  a
      else
    + N& [! \& q% U  begin( c0 _$ Q# L* B- M
        Column.width := max+50;! R# z% y  o: {
        exit;
    ) }, b; G' M2 C8 E9 ^* q. _  end;) Z, U5 T2 Z4 u" t+ y5 e  k
      with Tadotable(Column.Field.DataSet) do
    1 e0 i: g0 b: w* P+ S8 W  begin
    , f7 L% g7 ~/ C% j     case number of8 u- N2 s7 f; b! i8 x2 e" ?8 Z: F
         1: begin
    # _( |0 ]; @4 e$ {0 A          case Column.ID of
    1 H6 S/ R. e) E' y4 M( _          3: begin
    ! L; D$ k+ s6 b$ l5 V6 k# T              if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then5 s+ u7 Q3 U* j
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    4 }0 f. q! z# `) [3 I+ ]+ x              else
    5 z. Z6 h" E' M' Y' r& }                 Column.width :=w1[3]*8+5;9 U0 |/ g+ i! Y6 L
                 end;& y4 j& M; x5 w
              4: begin+ P* Z! ]. z/ e4 O- V( t/ ?, K
                  if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    $ V1 Q4 Z9 ~7 v% s" C  R                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ( q2 n) ^, {; e* N2 P2 b0 |              else' e* r3 H' [7 m& L0 o1 h# D
                     Column.width :=w1[4]*8+5;
    % t4 K. ]& [8 J             end;
      J2 }7 j6 o! `0 P* U          7: begin4 z- r+ L" B0 J1 a" ]
                  if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then$ ^* r* K$ e* u  d( |
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+56 ~! C; w/ ~9 N
                  else4 X7 p% D& w# T3 z$ r
                     Column.width :=w1[7]*8+5;
    - t; y7 k) u- g( F- X8 E9 _9 B             end;8 U/ S/ A/ j5 }2 _
              else
    8 {% A' ]- y# Y/ K3 v) M# z1 m- W             begin1 ^* |6 \9 X4 [
                   first;
    $ ~5 G3 L( b4 X3 K$ N               while not eof do8 X1 t( |, |( o! @0 R6 S( M
                   begin
    - D. I+ b# n0 s; s0 L# d9 ^                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);5 _( Y, L& N& n9 f5 u
                      Max:=math.Max(colwidth,Max);6 n  S- S% s- q7 [# o
                      Next;- `1 u" a$ _6 q4 U/ ~$ y4 c
                   end;
    ) x7 j$ P( A* t* c  T% d               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    5 O0 u: o* Y2 q. j* _                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5: T$ j1 \0 q1 q$ k* N, p
                   else' @, h& A3 L( @/ X) x
                      Column.width := Max+5;. k3 l- A' b( H& d+ c% r
                 end;5 d& U2 W' \8 X- Z5 `# @% |; L
              end;" T0 @% O/ t: H# a% B' s
            end;, ]# s; }. n8 p9 Y2 q' x( R# p
         2: begin
    . e$ B9 R" M# w          case Column.ID of
    9 z9 Z0 L4 L% V0 J          4: begin
    , b/ h" W" T1 Y) W              if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then# r1 b: p+ d! Q& D# j$ ]5 ]
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    / D) ?2 E$ y8 V  [, n; F              else/ e- G( _! S" N/ j# q$ V% I
                     Column.width :=w2[4]*8+5;! M7 b6 b- |" R! M  O+ V
                 end;
    4 j+ q: N0 K) \# [0 h8 s          5: begin
    + u3 K  _& H# U4 x              if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then. R9 J+ Y- Q1 z6 c- y, ~: v
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    : S; n8 E! Q* o) ~. I! H              else$ V0 H! s: o* z' s9 [
                     Column.width :=w2[5]*8+5;6 {0 Z9 |- x% A* z
                 end;
    3 B4 _$ P% C, Q) k" u9 }0 `5 h          6: begin# _- F' }# e3 f: S; T
                  if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then/ c( Z% s7 t0 o* Q' o8 }* A8 ~
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    . [! ~/ V. X8 o* H              else" `4 N' x5 y# K7 W# k1 E7 T$ T
                     Column.width :=w2[6]*8+5;
    3 y; o% I/ }- P6 H, `             end;4 N- C% i' A- s+ k. s
              else
    $ Q( ?- W7 y4 F             begin
    - U3 Z% I+ H' y9 D               first;
    8 M# e4 N$ Y  e: e& f( u               while not eof do; Q8 O2 H5 n* j
                   begin, d+ T. m5 D5 e) f, {  r# o
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);8 ~; \& {, B: B0 S
                      Max:=math.Max(colwidth,Max);
    ! O2 o7 {/ a1 f5 o( h$ _$ V2 f                  Next;* L: A4 j& d: q/ U
                   end;3 V  W% ]" p7 C& U; I# h
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then! e: J, i: S4 \/ ?
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    % T2 ~' p) d+ ^0 [+ _               else5 L, H/ s$ }( n6 \" X* G$ _# A! m
                      Column.width := Max+5;
    . X  D9 x% H: h2 p             end;0 p* M3 X- h4 u) u! l' I
              end;
    9 u0 H8 o- C$ v& [        end;# S( `2 x( C% R4 r+ i
         end;" Y  L$ @7 A" I: |9 I
      end;8 t3 A# B2 K( U4 Y8 c) ]
    end;</P>; v& l& k/ L' E: K% z" b
    <>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);, p7 C3 n5 I, D( A. G2 \
    begin6 Y  i; _; w. y( N
      Orderby(suiDBGrid2,Column,2);
    ! _& N  f% A9 Y# i8 T) aend;</P>0 |" O1 k' e+ a
    <>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;2 X& c. f" y. R# R" B. c8 e) _
      const Rect: TRect; DataCol: Integer; Column: TColumn;; |: [6 Q8 j! R: @. w
      State: TGridDrawState);, m' m4 }5 v: v4 F. _
    var
    - _. G4 G. D0 Z# n+ ~% n8 a   DrawString : String;
      P/ d+ A, v5 C   sys:TSysOper;$ V& ]  D( V9 W: z, K/ p: _
    begin
    1 ~7 j1 Q! _! a$ h% b' V4 I   if (gdSelected in State)then1 H' U* I( m' G( [/ ]" e  _) ^
       begin
    + a( V( h0 q3 C6 D; c     suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色
    ' G6 h3 R0 [8 h4 r2 F& n( y   end1 g) U) j! o. z1 C+ ?7 T6 h+ Q
       else8 v& V9 S2 R' k  D
         suiDBGrid1.Canvas.Brush.Color:=clWindow;
    & Z$ t" i" S1 d5 g0 a) a9 k9 _   sys:=TSysOper.Create;4 ?  f! d4 U! t. e% u. c
       try3 {4 T* {4 W& U8 s
         if Column.Field.IsNull=false then
    - o0 Y  i* z3 p6 V/ w( Y* n     begin
    / `; F! F. D# ^. u0 Y4 v- \* t* a       case DataCol of
    , y- M3 K' v$ i5 f" B1 ]! @       3: begin5 u0 k1 `$ v) X% S4 T+ ~2 o0 {+ r
                DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。
    ; h/ _3 ~7 P3 F' [4 i% M            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    ! l0 H3 y! \6 \            w1[3]:=math.max(Length(DrawString),w1[3]);
    , z( O& B0 ?- V; M9 n% |$ c5 c9 A          end;9 A9 ~: X! V  o+ m6 W( h
           4: begin% X- ?' {/ k5 R! y( b
                DrawString:=sys.getLoginMode(Column.Field.CurValue);
    & D' d, e& v6 S8 L. l            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);( W4 |9 V7 G# j& p1 _+ U
                w1[4]:=math.max(Length(DrawString),w1[4]);
    1 v- r- ?  t8 h  F& Q          end;
    2 ?  c$ ^8 E0 N" y' A9 a. U3 O       7:begin
    % q5 y3 d1 S+ @) o0 A            DrawString:=TimeFormat(Column.Field.CurValue);
    2 N+ m8 N- W) S& \+ o6 w            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    $ f$ Q0 G2 U: V$ Y0 T            w1[7]:=math.max(Length(DrawString),w1[7]);
    ! @- f+ E4 f: E7 x) a5 ~4 k          end;
    - E7 v; s$ E" b- m9 `) b       else
    7 T1 X- \* B" j5 h0 P+ t4 R3 R          suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    ( t3 D: U2 t, \, M8 a       end;: A% H3 ^  e0 h! G
        end3 z9 P& n' }; f. d
        else# U. e) E+ \) ~8 T7 X
           suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    ) _! g6 Y$ r; y  }2 r$ w( o  finally
    5 j0 ^7 v3 v) G0 }: y  l    sys.Free;
    ! {! J; C* L8 }. K1 K7 B  end;
    0 a; v# ^" s" ~& m* X. xend;</P>4 G; E" `+ E% i( u7 ~6 Q. u7 V
    <>上面是操作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-7-21 02:51 , Processed in 0.415190 second(s), 51 queries .

    回顶部