QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3119|回复: 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, \9 i- p6 R) t$ |3 t, A4 ?
      W1: array[1..8] of Integer;
    : @9 F6 g0 Q3 M8 n: j7 r  W2: array[1..8] of Integer;</P>
    3 [# X9 V6 [; f7 `' y0 O8 J1 j<>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);
    ' ~9 m) x7 M# @: gvar
    ( c7 S" i3 i% V- S% p# g3 H1 ]/ r, g  colwidth,Max:Integer;* o4 w9 |$ j0 r. x* a! \! ^2 T
    begin# y& ^& W2 q  S# y5 x' Q
      colwidth:=5;$ D/ `9 i: E* x# P/ i/ S
      Max:=5;- h+ z5 x' Z2 Z; ?
      if not(Column.Field is TBlobField ) then
    7 t  m( O7 r7 r- ~" Q! ?' g    Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName
    # ]0 v; N$ p! Q) y) `' p  else) F( N2 W8 b# n7 Z  ?
      begin
    # M. {+ |" G# J    Column.width := max+50;
    # t2 d( t9 i$ L1 X    exit;8 v/ X) T( z7 [" A
      end;" Y) [% U1 u$ {% N5 m' G
      with Tadotable(Column.Field.DataSet) do
    - J0 E6 p5 p5 k, w/ x9 Y. L5 J  begin5 [5 b+ v6 c( I8 g( Z
         case number of% I; \/ R3 c2 F4 N# ~; f
         1: begin+ ~% d/ S5 C4 L& t# E- C; i
              case Column.ID of' Z* m% v5 ]% l. N3 i: N
              3: begin( e: H1 \0 S2 j- J+ r! h
                  if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then5 h9 ^+ L* q9 t$ l1 A' S
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    " _( q- E; k9 U, h3 \              else
    . l& f% l5 D: E' _" g' c                 Column.width :=w1[3]*8+5;
    9 J% ^# l$ I/ Q8 L8 A$ r/ h7 n0 D             end;
    . U( h* g1 [. X% q          4: begin! q7 P0 R$ T" C8 @6 ]; g: [' P# ?
                  if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then; w& `5 d& a/ u% d& i6 b: ]6 Z
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    " r* K4 X' z1 ?; F% J' K2 z7 s              else
    ( t$ F' q1 _: [( T1 q7 w5 z                 Column.width :=w1[4]*8+5;
    2 V6 L- M! P7 \) }* g             end;
    , M& W# M5 v# s- u          7: begin
    : C9 _/ w$ r+ i+ k              if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    & t8 F" w. `" \( z6 K9 L4 x+ ?9 L                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    & K3 i9 Y; s+ r4 m1 G4 u3 {7 I+ G* F              else
    $ k0 h0 {0 y% `' a' k                 Column.width :=w1[7]*8+5;5 D( O+ B5 _$ x" h
                 end;3 K. V+ q2 a$ Y8 X% |( N- E6 Q+ O4 t
              else
    - S/ o! L! W' C* e             begin" h7 H# ?: @1 d( B
                   first;
    1 O6 ?' i2 Y7 e( Y; b               while not eof do2 [' ?1 J1 z- l0 E$ q: O. f0 g
                   begin/ T7 [' l$ H% x2 _, o" L
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
    4 [( O4 s7 F9 l4 k, u                  Max:=math.Max(colwidth,Max);
    , H7 |) Z8 a* Q! t                  Next;: O: G' e- }. l2 v, c
                   end;
    + v- f8 S" a$ Y, F9 p               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then3 t0 ^$ E* g: ^3 \/ i; B$ h9 y/ U
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5; o' Y' S4 O4 U/ w# q0 j5 @0 A
                   else
    2 x5 u. _0 z1 @% K: F6 A                  Column.width := Max+5;9 u# l: o' U" V; i3 E$ O8 l) Q) R0 X
                 end;
    , @) f- c# |. b) E; D6 ?          end;
    ) ^2 s2 x" H4 G- [5 u        end;( v; _5 [$ W5 j6 H3 {8 U9 b$ a
         2: begin" W. T  ~( b8 m- i, r; l7 r3 {
              case Column.ID of$ D& R2 K/ D6 s
              4: begin
    9 a! ]8 D: f' J( ?6 `0 x0 C* ~9 _              if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    : T# K) e/ F/ ^# h& A) g                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    6 y- @$ A. b1 L3 T; j, F6 z              else
    ; j1 s% U1 ]4 ^3 v3 B7 G                 Column.width :=w2[4]*8+5;) M) d7 z) y* Y
                 end;
    0 O: e& O$ u% }; h$ m0 l          5: begin* ]5 b, ~/ ^- a' F
                  if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    # z9 _& b6 M! s: e; `8 Y) I                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    1 n! I9 o( ]. S/ `* V# k6 O. P$ y              else$ D% R" _2 I, B; f3 U; S
                     Column.width :=w2[5]*8+5;
    # V* O4 E( u* N, {             end;
    * q5 U6 B* a5 Y          6: begin9 z  ^: I- f" k4 x8 r
                  if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    0 F+ j% M: L3 @5 S! k6 u9 a, ~+ ^3 j                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5* K) m: |8 {6 W9 d/ j
                  else
    0 t: j8 B4 [% l  O                 Column.width :=w2[6]*8+5;+ }4 [* f' I+ Z1 ^( ~  H
                 end;+ m; j! `. g8 ~6 ]* f$ L
              else
    ! k' s: L$ S3 Y1 A9 D             begin
    ; a& \# K0 N# \               first;" H' X' e: w7 @4 |$ A1 u- r; ~
                   while not eof do
    3 m8 T' u$ ?% r  |. O  b# D               begin
    8 w+ p5 X# s# _8 o) y1 Q                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);, Z5 _# D) \( f, f. x
                      Max:=math.Max(colwidth,Max);1 {# a0 ]+ a' ]0 U* Q/ E# p" x' Z
                      Next;0 U1 I3 D& d3 T5 M
                   end;
    ; |- L( {4 y" i               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then! t( i8 L# V. p& m( h
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ) D  n0 q% {/ K* m6 f7 T, p               else6 F7 u# h! a7 Z4 x9 \/ c3 V
                      Column.width := Max+5;
    2 H: J2 j( X9 G; R% D# e2 S9 G             end;
    ) j7 W! A' U3 u          end;7 R5 p' Y- i: c% ?9 b! k
            end;9 \- C- }' }/ O" e% v! K
         end;0 r6 k# \  T$ l. [& t% ^
      end;
    ' j/ O/ x" w2 J* f% send;</P>* p) y+ [2 h# f  ^) D$ A8 p
    <>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);; U- c  u, |4 F, m) k4 \
    begin
    2 s; m6 Y& a# {* H% [( j5 x( n  Orderby(suiDBGrid2,Column,2);
    ! L+ _# |7 \7 r0 {2 t1 u1 wend;</P>
    1 q0 m+ i1 w1 ^+ n8 ], n<>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;) Z" i, g0 M+ u& {+ N) [
      const Rect: TRect; DataCol: Integer; Column: TColumn;
    1 m: Z, G( F9 i  State: TGridDrawState);3 @$ b3 V$ z& P
    var. P5 N) m7 Y, K' o- I/ w
       DrawString : String;3 H0 }0 s/ {% @
       sys:TSysOper;
    9 F) u3 S/ w; B$ |begin" ?/ o$ m& T$ V8 y2 S( J& v' @
       if (gdSelected in State)then5 C. C3 H2 A0 ]! o
       begin
    9 Q$ R6 C. a# H; h' m  w) B     suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色
    7 Q, a) E3 o5 f- ^   end8 V! J5 @4 k; F' T( w5 X+ _
       else3 }! [1 u. _3 A- @. J
         suiDBGrid1.Canvas.Brush.Color:=clWindow;
    * P  a0 l/ N  K' ]% S8 w6 \) T   sys:=TSysOper.Create;% B  _) j, E! x' L6 y- _' z* l
       try2 |& F" R0 M. B
         if Column.Field.IsNull=false then
    2 ?+ h& M  ?+ N9 u/ j     begin
    % y( [) r4 X! g; ?) `4 k3 \& e- N       case DataCol of
    9 S# B) c: r" N7 m0 a       3: begin2 B1 m9 p$ m- T0 _# G7 y
                DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。
    0 x+ a7 H& E  b: X            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);$ n- i+ o( o( I) [2 k$ F! a4 d' R
                w1[3]:=math.max(Length(DrawString),w1[3]);% y/ B, K3 Q$ t. ?, H. V
              end;
    1 R8 @2 Z$ z, y+ l9 ]       4: begin
    ' S. V5 q5 M" _6 p" P            DrawString:=sys.getLoginMode(Column.Field.CurValue);
    / G( D$ L7 n1 W/ i: Y$ W, v            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    3 Q, M4 X; M; f+ T0 X            w1[4]:=math.max(Length(DrawString),w1[4]);; i/ K  r2 c7 ^+ M0 d- G
              end;
    5 u$ o; i% V6 y+ t       7:begin
    0 _& T" x: _% k5 Y7 F9 J7 H+ P+ k            DrawString:=TimeFormat(Column.Field.CurValue);
    & h. W3 M$ n1 y            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    1 U1 [0 R* w# I! _6 c            w1[7]:=math.max(Length(DrawString),w1[7]);& d; ~! L5 q/ C/ w
              end;: Q& C3 D7 W5 B" E
           else
    3 m; X: }) N7 ]/ }. s( H- z6 H5 U          suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    6 F3 S- S0 U4 D+ f$ ]0 K4 w1 h       end;
    - }% X8 B' |8 ~% ]7 {  R; |0 A$ ?    end% D3 ?0 b1 l1 m: |
        else
    ' M6 m' e9 r9 R- b+ \" |7 S8 i- y       suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);; T+ M1 p/ I# I- g1 g8 q* C
      finally, ~! X: `1 @8 l5 j
        sys.Free;
    ) N; R8 L) t8 `  end;1 f4 |# `5 K4 Z6 T6 Y3 Z
    end;</P>+ ]( G- U8 B; n4 d4 I' _
    <>上面是操作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-25 03:52 , Processed in 0.289369 second(s), 51 queries .

    回顶部