QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3042|回复: 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
    5 _, p# t1 l. }* |, l) K) y: n+ P  W1: array[1..8] of Integer;4 V* W  q, d# B  W6 A# M6 ^
      W2: array[1..8] of Integer;</P>
    ! x5 @: S: t: \! }2 j6 c2 i& i# B, ]7 D<>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);9 V% s+ M* N+ v# Z& ?' u5 x" B; z
    var4 y4 p, D! p1 v# n# u" ^& r
      colwidth,Max:Integer;
    ' c; g- b! s/ D* V5 X. O- }begin
    0 R* G6 _$ g8 F. ?& @9 W  colwidth:=5;
    4 z' S/ o4 r+ u$ W( Y4 v  Max:=5;
    7 J, N7 a& M- [2 O3 E+ B) w: \  ]7 E  if not(Column.Field is TBlobField ) then( c) l, I/ Q7 i. H+ |7 P8 ?
        Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName
    $ M4 E4 W9 D% a  else
    6 Z: v. h0 G& T' b& R8 K/ I0 j  begin' S/ D! W2 f& y7 A; ^
        Column.width := max+50;
    & ^6 E5 |% A+ F, E- G    exit;) {* z5 ]( F" W+ K
      end;
    6 i" s# S) q1 l: P7 o, D) z# }: z" |  with Tadotable(Column.Field.DataSet) do
    3 w( r6 W" y* ]" Y3 j  begin
    4 r, r; Y  U) o+ |     case number of
    ( j) e! E- T3 ?0 o     1: begin! \6 n; i3 I" c
              case Column.ID of
    1 t6 ~* e" x1 Q& p" p0 ^$ u8 B          3: begin3 E, Y+ H* b+ M4 s) Q7 k
                  if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then9 L$ Q$ w$ M! K4 U8 f- m
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5  i2 Q' r1 X# h8 n
                  else
    4 F, ]9 f4 K6 M8 K  S3 R/ l                 Column.width :=w1[3]*8+5;$ J1 z+ j" N+ T8 V# }( I; o* _
                 end;
    ( L" {: @1 }+ u* L; y3 _3 E          4: begin
    3 @1 O+ m9 C0 H% b              if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then3 ^( L' Z0 P4 I) `
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5& y# W1 b  X! ^% _' c# N9 `5 T2 o
                  else, {; z* X# }3 S" }, k* y" ]
                     Column.width :=w1[4]*8+5;
    * F- W2 J# e# A( Z' x, Q             end;
    5 K( @7 |8 p/ j. w          7: begin( E7 C2 T5 y; i. _5 y* Y
                  if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    ' y6 H$ p' [9 g                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5- c% g5 e6 I0 e: ^* U% \
                  else
    . |  {5 d# `# y, h; W5 i$ R                 Column.width :=w1[7]*8+5;
    9 ~/ N5 y+ ~4 \. k) a2 J6 V. g             end;
    7 A! C; w8 X7 C: k* S) R          else
    3 Q3 S. T/ x) h1 e8 C3 f  [4 u' O             begin8 I2 }# q7 [0 m
                   first;5 `$ [, K* y) j! ~
                   while not eof do
    4 T; [7 t. V% s  o1 p* K               begin5 V8 B6 g! L* r& e, {6 U0 k
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);+ F( ]) |4 b4 L: H) e% f8 u  t
                      Max:=math.Max(colwidth,Max);
    4 E6 ], M* G: Q. }# d! F                  Next;6 g- H. X  l) v1 V# d* u
                   end;  d$ G/ S' _! Y. O7 o, V8 Q. {
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then' U8 m7 t$ R& H' K) a- C1 f
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    # Y1 ]- G& z7 ]# y! J  j               else: ~1 e3 }& X. v
                      Column.width := Max+5;
    # `3 G% T$ d& s" [% e             end;
    $ |0 B( _, y* A          end;! \: X: f9 Q# a) s% y
            end;
    ! y8 P. W( j6 e$ s" h5 G     2: begin
    ; Z3 f* J  |6 `! h& d          case Column.ID of
    6 j  X( a9 S7 p: A# h, |          4: begin
    & p5 l8 n" `( q              if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
      E: [4 F% u5 z% U                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+54 z5 w# j: w/ P) C. }; x
                  else: Z! m/ D9 L$ g) B5 k
                     Column.width :=w2[4]*8+5;
    % g1 ]0 l$ x1 n) k" c             end;
    ! Q5 M8 |8 z; }7 X          5: begin
    + D. y) i8 `3 Q% p              if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    % y4 P' c5 w+ S3 k# E* B; T9 @                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+52 u0 H3 l1 i& ]* t1 b# K/ K
                  else
    0 c3 ^! s4 g2 M& }                 Column.width :=w2[5]*8+5;. A2 |) I/ Z/ d% c  M) Y8 ~  g
                 end;7 a, k. c6 M) E. Y% Q0 V7 t
              6: begin. |( v) ?, |5 p/ j( {, N
                  if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then( w$ J4 a2 h* W7 F) b$ W
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    % b3 v8 j6 }6 R7 D, `4 h5 x/ o, B, o7 J              else
      o( W- U! g. \  G1 x/ Q; S  ^                 Column.width :=w2[6]*8+5;
    ( n; S% T6 |% ]% x# {5 i: m             end;3 Q, `8 e! T  ~+ J$ Z
              else" _& U3 P8 L) s" `# t
                 begin1 W2 i( v5 y) l
                   first;
    : U1 I7 g7 f4 o- s7 C               while not eof do1 J: m/ U4 S, n) i
                   begin) N) O* |" G( A5 x9 a5 a( |5 N
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
    * l1 x* k9 s: t" ?0 O                  Max:=math.Max(colwidth,Max);
    : S' z- Z/ n% {$ ^9 H: g                  Next;6 b; E( l; I% s
                   end;
    ; X4 `$ p8 t5 g               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    3 B5 }2 i* K, E: i+ s                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5  ?& v- d! j4 Z: {1 W
                   else4 F  ^. g8 M4 }" \
                      Column.width := Max+5;
    9 o6 A* q' c9 B             end;+ l: @) U/ p% D  d7 q0 \
              end;
    , m, w! {) y5 {3 Q        end;
    6 |) r( h2 M, L& h* D     end;9 G9 I1 Q" x/ C3 x
      end;
    * O: N* y/ g/ y$ o5 [end;</P>
    / d6 f1 X# Q' z; |<>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);
    . C4 X9 }/ P& f+ Fbegin) \( x+ t3 `& W
      Orderby(suiDBGrid2,Column,2);( P) H7 ^  \# d. `9 C
    end;</P>/ ?% X% _( W9 d1 r+ V
    <>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;0 v6 i, {1 x! W) F
      const Rect: TRect; DataCol: Integer; Column: TColumn;6 |/ `& O7 P, X5 ]4 Q
      State: TGridDrawState);
    3 f3 r+ K7 L& C; J4 c7 |! P# p  evar! O+ B5 p: J0 {) y3 C/ P+ n
       DrawString : String;
    ' {* N$ @! q9 j- A6 K! H   sys:TSysOper;% R1 e& U2 S& e+ B
    begin% z! k3 j: T: \5 t, P
       if (gdSelected in State)then
    ( _6 T* {$ Y+ f9 k( Z+ j) P   begin& Z% h% w/ w) Y5 l7 U- d
         suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色
    1 V7 X. e% O4 t6 a( W, j4 z  Y   end
    + ]# ?0 I7 Z7 ~. ?$ L% e+ n   else
    + p* f4 m) T6 p% E     suiDBGrid1.Canvas.Brush.Color:=clWindow;6 _: t- i$ t4 B
       sys:=TSysOper.Create;
    - _' t' h3 v" i0 O( C   try
    4 M% j4 p, t6 M/ D4 x) L% B     if Column.Field.IsNull=false then- |+ N! y2 V3 o, n9 e7 f# q
         begin2 ^# I' |! ?- e2 ]: R% d" Y; z
           case DataCol of; j: }1 f) p& K' C* l1 q, q* W8 F
           3: begin
    % A( h; i/ u6 B$ k, n$ P            DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。
    % E  Z: Y7 t5 g2 }% {2 G            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);; q) z1 g. |  W. }1 F$ M& t
                w1[3]:=math.max(Length(DrawString),w1[3]);
    $ l) P; G! a, B          end;
    2 m, U9 j& x! {. [) }* w" i; G       4: begin
    : P2 j( [8 N% Q3 R# ^  a            DrawString:=sys.getLoginMode(Column.Field.CurValue);+ A/ i7 Q- c$ M# w1 E: J$ m
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    6 F% k/ H6 r! K% z            w1[4]:=math.max(Length(DrawString),w1[4]);) U4 w% \! i0 m( t+ C  ^
              end;
    8 s6 b  {) V8 G+ b" b, g& h       7:begin
    + a: F$ s  d8 \- r5 ~2 u            DrawString:=TimeFormat(Column.Field.CurValue);
    ' r$ f; X: D8 F3 N            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    # U, t1 e# e3 Q$ Z            w1[7]:=math.max(Length(DrawString),w1[7]);
    7 l; |# B' A) O9 L          end;* ^! L1 J3 Y% D+ K, ]9 Q
           else7 V1 _4 t8 {6 T$ e. }% h+ \0 h/ M
              suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);3 `8 _- n! O! |$ |: g  w% O$ G+ M( h
           end;; r) q( y" _2 b3 y9 V, n0 ~3 x: i5 G
        end
    % m2 C; H4 x3 o$ X, A    else
    ( D$ L% s- x1 @3 m; m- H1 Y       suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);; q$ P: C: Q3 ]( e& L
      finally
    " j$ }! p' H% g7 |: _8 \1 ~    sys.Free;4 h  P2 J# {9 H1 @% }/ q" r0 q6 y
      end;, T# K1 j0 d3 o- w
    end;</P>
    ; y5 P/ X( c, Q( R<>上面是操作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-21 04:40 , Processed in 0.449999 second(s), 51 queries .

    回顶部