QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3041|回复: 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
    6 g) J3 o1 L% D6 g  W1: array[1..8] of Integer;
    7 O7 n. ]: w+ U" o# t' b& [  W2: array[1..8] of Integer;</P>
    % w) }6 k) x6 W; m  {<>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);
    . T" B9 j, a3 R1 W! ~var
    ' Z2 b5 ]0 I- A% y4 T! j& Y  colwidth,Max:Integer;
    - ^8 N$ w9 O' r) h/ p! Ybegin# M2 R/ y5 i+ r6 p; o7 c' s8 H
      colwidth:=5;
    6 w  O2 ]. r  C+ y# _# M' X  Max:=5;) O/ S, t- w5 p+ l" W' h6 @' T/ {
      if not(Column.Field is TBlobField ) then
    5 b' h3 |; x0 Y# j8 t" d    Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName
    3 f3 H0 O- a7 r; k& j  else$ G/ N+ T2 m8 m3 J& P- P
      begin% F8 r3 u- P* g. m
        Column.width := max+50;1 D( y( ~$ L3 D# W, N
        exit;: A9 h( s+ ]2 S6 e0 Q
      end;3 M5 l6 Q, n$ a) H# K; S4 N$ `
      with Tadotable(Column.Field.DataSet) do. }( E6 G' F7 v* `2 {  Y
      begin
    " C& p  @5 X7 f# m     case number of
    6 X) f) T- {* P# L     1: begin
    9 h/ [3 h; D9 C8 [4 R  g          case Column.ID of0 s' C$ ^/ O" K% J9 e/ P1 f
              3: begin
    4 C; s9 |; Z: v5 O, g3 R              if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    " B' B8 ]8 f0 U: z8 ^                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5! R$ R4 U4 u: H" I1 W  o2 o
                  else5 f% U  D; W( m! c8 n' z4 D6 h* }
                     Column.width :=w1[3]*8+5;% k6 D" K7 Z4 J: X
                 end;* `1 n# G. y2 ?) Q0 F
              4: begin. y$ q8 K( F5 R* m/ x* f' |( z6 S* ]" |
                  if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then* l4 C5 d# b: c  n+ C/ Z* a2 I2 A
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    $ B$ S7 O6 L' m& d5 ^4 a              else
    + r  p6 \6 w6 W$ \8 D) W                 Column.width :=w1[4]*8+5;
    * K6 m  w) k. l* i0 c% G8 Q             end;6 @* t! K! Q* V# X  X! a
              7: begin3 R3 {  Z( Q; Z7 F" B: h0 m- ?; V1 B
                  if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then* \) v5 P* m; o$ d  e
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ! ^& I; [% m1 C8 T& p              else
    3 T6 M0 |$ Q) x                 Column.width :=w1[7]*8+5;
    ' ]/ A4 I, J; r& x/ _5 q             end;( i8 S9 v5 K( H5 r
              else) N1 _3 P* C: y  ~
                 begin$ y4 o; ], q' t+ K- D5 a" s$ }
                   first;
    & y$ @- J! Y# Y- {6 s! x( K/ D               while not eof do) u, l0 G  m0 B4 E2 O1 S
                   begin
    3 e5 ]+ C( f! s- u" n                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);% N' R5 i) U0 `% W% i4 h
                      Max:=math.Max(colwidth,Max);
    . A7 B7 d6 n" I                  Next;& L6 M  O. q' C0 c/ _9 r
                   end;
    ) m$ ?3 ~- o3 t. W: y8 z# v               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    ; @3 o9 @+ M6 `2 F5 E                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+55 K8 `7 [& B; t+ f0 i/ ?
                   else2 Y2 H; a, \! B6 B
                      Column.width := Max+5;
    ; h5 Y2 G1 A6 w             end;
    ; U' I% x/ W, @0 v          end;
    & t! p/ W$ r$ M0 }3 P        end;' b( o* f0 a# E6 B2 ]% [
         2: begin/ W, V  j* L: o
              case Column.ID of* y2 m; X/ l: Y& N3 _
              4: begin
    ) j/ z! u% G+ \9 r0 L# S              if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    : A- }8 G) F* E: I5 V* v                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5$ l& a5 I1 M- ?
                  else  w. _- y% a! X8 i. ^5 s/ e& t
                     Column.width :=w2[4]*8+5;8 u& R! Y, Q1 Q: ~: c/ |9 Y
                 end;  E! I! v1 ]' S
              5: begin$ E2 F& F8 h' o3 v) I# q$ Z; U
                  if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then! B% ^' `8 q- A4 t
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    0 T) y: d; f7 `! _+ Q% R1 o              else9 u) g7 {) G& g, k/ ~9 n
                     Column.width :=w2[5]*8+5;
    1 V# ^5 q0 t( M; J2 X             end;
    , F3 f3 v/ h5 q: W          6: begin) [7 J" {. \6 b. K' h3 z# c
                  if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    $ G! K3 R% ?0 O5 a, a                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5' R7 V$ G0 b8 M6 ^$ H
                  else- K0 J( }3 I* r' |
                     Column.width :=w2[6]*8+5;( q# y! W2 l# {2 ?5 w, ]
                 end;
    , y2 X& O- l/ z2 U% e$ z  q, e          else
    , ^  S+ }, b- x: \8 c/ L& a             begin
    6 c: B" h9 a$ G3 f               first;
    1 M6 o) m9 k, W" @% p/ ]               while not eof do
    9 L2 k6 D6 g- F0 O: F               begin  `: G# q% B. n8 V4 D  G
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
    5 n4 G4 ~  D9 @1 T                  Max:=math.Max(colwidth,Max);$ D8 n1 O/ n+ R& K  b4 G8 O6 U
                      Next;
    0 N7 o3 c* M5 v4 p& N% m( Q               end;
    4 ^8 G# p- k2 g+ }" W. K1 w               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then2 T, b- ?8 V; M
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    3 u! A* L2 V5 T: \, U& I/ W/ m               else
    8 a& x: E# y9 I/ l8 b                  Column.width := Max+5;/ r& G3 U3 y7 f6 K* P1 X* H0 \
                 end;5 z5 D& n. I# i
              end;
    ' d7 J" Q/ o( }5 t, x        end;9 [* v( W9 O% b
         end;
    . D% V% ~4 [( S  end;. v6 w1 L) U% @0 n
    end;</P>
    & I+ @- E: Z9 c! X  L0 r- G! Y<>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);- F4 f  p9 m! a( ]
    begin
    0 O( @; }3 }$ j8 x3 M" K! N  Orderby(suiDBGrid2,Column,2);# G6 R: b" ~7 z; k! t& E
    end;</P>: g, P% P! p) ~/ @9 M, N& d+ `
    <>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;
    2 }/ I. u$ k' l9 P  const Rect: TRect; DataCol: Integer; Column: TColumn;
    2 q' b2 o) w, V  State: TGridDrawState);
    8 }1 V& L7 T. ?) I) M7 _! C: gvar
    0 [4 L3 B+ G- k" x3 O7 l. b   DrawString : String;5 L/ e5 h* q) R
       sys:TSysOper;
    9 w( L# m* m( z* S: Y( hbegin
    6 l3 {! ~6 u) X1 E! R& J   if (gdSelected in State)then7 C; ~3 o0 G- W  ~1 ^
       begin
    , x5 X/ E, u9 Q- v0 K9 _     suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色
    & K6 |- J( Y7 X9 y) p   end$ O. z! A  A7 t+ A6 J' {0 C/ O2 }
       else
    9 K  v! d% l9 \( W+ B  V6 [     suiDBGrid1.Canvas.Brush.Color:=clWindow;
    0 t+ i$ v/ K) ]* s" w: m5 s   sys:=TSysOper.Create;
    5 y. t6 Q6 A& y4 g. w   try8 w/ W9 t3 Y; k. G3 c( G
         if Column.Field.IsNull=false then
    2 U9 ?5 G. ~- b     begin0 F7 y  l7 o$ ?1 o& Z
           case DataCol of) v* L( W0 `# l# M8 V/ F5 K
           3: begin
    % [* V* ]& O" h# j# `3 |* d            DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。
    1 a+ w& e5 y+ T5 U- P2 u: v. y; }: c            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);# B/ c1 G. J, }; N" i
                w1[3]:=math.max(Length(DrawString),w1[3]);; O- U' h6 j, d" A* }8 s
              end;: ]: ?+ d) B; W2 @
           4: begin* d0 l- x' a- J4 ^" B
                DrawString:=sys.getLoginMode(Column.Field.CurValue);
    * j! S. I/ W9 ^" `. C, U            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);8 N; Q2 Q! D. y7 ]( e7 s- m! i
                w1[4]:=math.max(Length(DrawString),w1[4]);. o( y$ ]: l4 ]- t9 h
              end;. L$ b4 K& I) e, i8 {' q
           7:begin
    % `" D& L$ Q: x            DrawString:=TimeFormat(Column.Field.CurValue);% W6 O9 b! s- g, u. ?! A/ E
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    2 a$ x7 ~2 p! V1 K. K$ Z. L0 x            w1[7]:=math.max(Length(DrawString),w1[7]);% X% U& a& m3 K1 G5 v
              end;/ T" F# j  O* w6 y
           else
    - ^8 \0 F, Z' @+ R+ Q& Q& g5 E          suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    & t- ~& |, {4 [5 u; B7 l+ ~       end;. g; u) a8 D. R8 \+ C* v' L2 q
        end* N2 `% z4 _5 }5 l2 i2 Y1 P6 f# j
        else
    / \5 g5 f. L, a       suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    , P/ S) S3 t, A. u# b4 C  finally
    0 c3 p4 x0 j/ a0 i9 u% P1 {    sys.Free;
    2 a- |2 F. ?1 u8 m  {- C1 j2 n- r+ H  end;& c/ u# @5 S5 ]! v. h9 A+ |
    end;</P>
    9 K* p$ e; f6 Y<>上面是操作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 15:13 , Processed in 0.421629 second(s), 52 queries .

    回顶部