QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3060|回复: 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
    * Q( N: B+ [7 {0 m9 F$ l& S. ~/ L" [  W1: array[1..8] of Integer;( Y+ I. T2 d/ T2 V
      W2: array[1..8] of Integer;</P>
    & |# b  L1 M3 T$ ^$ d<>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);8 |" P" i; I: T9 D2 }/ ~1 \) s( ^
    var/ p( S9 i2 Q# Z7 j  a, f& O# {0 n
      colwidth,Max:Integer;
    - T3 ]' a/ K+ L- \( V/ {1 _/ _  wbegin/ B5 o' Y( y% ?2 n: y
      colwidth:=5;+ x4 F5 O  S8 h
      Max:=5;
    0 C6 j4 x7 K1 K% i  if not(Column.Field is TBlobField ) then% |  Y% _/ H% u, U2 Y: e. H! X
        Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName
    $ k! v3 |, K# g/ j) H7 f  else4 ~: @: W6 }$ @6 h2 g# z
      begin
    8 K! ]% P+ s8 ]5 I; H- b. [    Column.width := max+50;
    5 B( \5 L8 M0 L/ B; B7 [    exit;
    $ [% L* q  N1 I$ L  end;
    ! }9 h7 k# R9 g' x; o3 J  with Tadotable(Column.Field.DataSet) do1 H; P; g- U2 c7 q/ ~+ T
      begin0 z' s5 c4 n; D+ \5 l4 n; q, l
         case number of9 K) Z6 s+ O  O7 Q* Z
         1: begin2 C  m. ^7 f  G0 o5 [
              case Column.ID of
    , S" u4 y$ s) m% V' U2 P0 ?          3: begin6 J1 L3 ?- p6 y- h  u
                  if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then( e5 e) g3 G% y! Y4 e6 o
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+54 x0 k4 a# A0 v) @) p' D
                  else
    7 d5 ?! A! Q0 v4 |4 z* ?                 Column.width :=w1[3]*8+5;
    ; K( L: Z" n& D# a             end;2 [, ]  X4 A3 G& `9 o
              4: begin
    , b0 A9 \8 B" I+ {) k5 M  {4 E              if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then! {, R- C( u2 m3 _9 T
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+59 \5 o) G9 L$ o
                  else$ N( s8 s# f" B9 [
                     Column.width :=w1[4]*8+5;
    % L( [1 V; a' y7 I' H7 k5 ]; G: C$ u* |             end;( Z8 M- a3 W" e6 Z9 Y
              7: begin5 M' Z1 D8 W- |/ a. q1 K0 w2 ~
                  if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then' M" k$ a. g6 {
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5$ o. q( l$ ?' i! z& @: p0 Z
                  else
    5 z8 G2 U3 ?7 z+ M0 y4 N. ~  _# ^                 Column.width :=w1[7]*8+5;- s$ i, l, a0 b  ~4 U
                 end;, h& q( z, _% l" W1 V; s7 D: Q# L6 m
              else, W# w' Z; R% g- b# z
                 begin
    - }' b1 f6 p$ r" H- u               first;$ k( i3 }8 I! n/ Q
                   while not eof do
    / k2 X3 J) _, q6 ~; A. U               begin
    1 A, u+ T  g" ?5 m$ P' f0 h                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
    ( x* k+ w0 [/ A" g                  Max:=math.Max(colwidth,Max);, M3 _; u4 E8 _9 t' D, [
                      Next;
    % ^9 r5 q6 c* M0 i$ ^% d4 X! b& u               end;
    1 i- T6 @/ k+ X" q: C) W: Y               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    ; A# }. Y1 K* ]6 I                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5$ X. T! z9 ?  A
                   else
    ( N0 F# M. \3 O/ ?4 t* o                  Column.width := Max+5;  I/ M* E; W  F9 s
                 end;
    ) I0 J7 d3 d. D7 S5 H          end;- x% N. H0 M/ u
            end;: s  B" M5 X2 O9 ]8 [2 c' Y
         2: begin: o* b. e' a  U7 ?# t
              case Column.ID of3 T) f5 s+ O' h5 a0 y0 @
              4: begin
    # j& x) ^" J2 `" }              if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    , g* F* x. [, i                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    7 ~+ H  J" J  ^8 i1 ^              else; A1 Y6 q7 [7 R6 _: O
                     Column.width :=w2[4]*8+5;
    ( i! A9 [+ Y+ [  m: x  W             end;
    7 R$ I) g: k' Q5 ~- X/ @          5: begin
    " i* i5 `( q+ Q% ?& }$ Q/ N5 ]" U              if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    1 K* m; @4 \6 c- C) j                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    7 C  }4 w+ n9 {' |              else3 }$ f: V, G4 Y
                     Column.width :=w2[5]*8+5;1 d) B( m+ k: P: p
                 end;
    ! W3 K5 u. |6 E/ v/ t          6: begin, b' T0 a& N* W; E- s7 c8 e2 {
                  if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    / K& N3 l$ [. f$ O% {1 ~: U9 M                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    3 o, i3 _% G3 ^' s1 @, J              else
    2 l; l4 b0 a% S4 y                 Column.width :=w2[6]*8+5;  @( v# ~% c+ a1 W! z6 P! E& y, v
                 end;' j4 x% X8 b" e' V
              else3 w; [6 H* |( |8 i  e  |; X9 y& S
                 begin
    + t8 m, e* F2 I) L               first;* K4 e  W9 E3 e' t
                   while not eof do
    & O8 L' o$ v' ?7 N; [- T: R               begin
    ) z& U; f( B4 C. ]                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
    + a+ d$ y/ V; ?, m$ n# M3 h3 h                  Max:=math.Max(colwidth,Max);
    4 W( M& |- G# e& |6 ?! c1 m" ?! J' ^: K                  Next;, h6 o, q" Z$ M, @  x8 @) x' C* U4 s  X8 N
                   end;
    * c, l# S- E7 b# R* P5 O! o               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then# N% v. j8 k0 U* }) g4 n( ?) Q: K2 l
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5& `& }4 E8 a1 Q% f6 l* B+ w
                   else% l5 {, P% B# F* Z$ ?0 l+ |
                      Column.width := Max+5;
    ! R5 V& Q8 M6 }/ B0 m# J* |1 S  |- m             end;
    6 F( }7 `: T/ i$ }4 ~$ C% C          end;7 D) B2 p/ N) u( z
            end;% T3 K# ~& H+ ^" I1 f/ ^  C6 B8 @
         end;
    - j; m& Q+ [; \# p  end;
    / @& ^1 P5 K" p, b2 ]( }end;</P>
    2 A$ e3 n9 B( p<>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);
    ! \- b/ h+ o+ G+ E; E" ibegin
    ) G( w: C7 `3 r5 e5 d  Orderby(suiDBGrid2,Column,2);3 [! H& `$ j& H; z+ j6 f
    end;</P>7 W" d2 E: Y" Z8 \
    <>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;" t+ Y0 }: S0 R$ Y8 n3 a5 D$ G
      const Rect: TRect; DataCol: Integer; Column: TColumn;
    ' J' \. c$ u" y2 a  State: TGridDrawState);
    4 a2 t" D9 U. m" ~! {var
    3 x5 s3 u/ c7 L' f   DrawString : String;
    ( V& g& I/ `: m( J   sys:TSysOper;
    0 M2 C" d# X9 L6 E+ I8 k: Fbegin, e' c; X  s9 @& v2 e' W9 m
       if (gdSelected in State)then3 l$ A3 I# c! H" z* _
       begin
    - K* M  O0 @) {1 Q) A* ]+ u! Q5 o6 R     suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色
    ( F6 s0 h3 {, k7 J5 ~0 d- [   end- G' b) l; k( \- v. a; k8 d4 c4 o
       else; t7 A$ z/ O+ `( A0 v
         suiDBGrid1.Canvas.Brush.Color:=clWindow;& w: s0 x8 {; |* X: p& ]
       sys:=TSysOper.Create;  S( ]* U( I. s. Y6 U& }
       try
    5 N7 l6 M; o8 p) s/ z8 T     if Column.Field.IsNull=false then! ?/ Y7 J! J% V4 ~& @  ?9 V4 ^" G
         begin: \  y/ w( r* }* d. @
           case DataCol of1 Q- d' A0 M# ~0 x; P9 j
           3: begin/ k) D. j" L, Z0 m+ z2 R' I
                DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。9 K! Q. ~2 N4 V8 z! p) E
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    0 G& J- N5 }, p$ h; }% ^8 K            w1[3]:=math.max(Length(DrawString),w1[3]);
    $ c! p( Y" Z8 X7 X- ?3 t          end;+ f- n' O# m2 W3 X/ m, _
           4: begin
    . R! s2 _+ S; P3 K; f            DrawString:=sys.getLoginMode(Column.Field.CurValue);
    ! b% D8 T: K0 H* K1 ^% I            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    8 Q0 B- Z2 i* c# r% x. \7 J            w1[4]:=math.max(Length(DrawString),w1[4]);
    ) U7 W! N& R7 [4 X8 x* S0 x          end;
    " D# }9 F, Y+ m$ _. P+ A  C       7:begin
    * n% o  L% h( V) h' ~! s1 Z            DrawString:=TimeFormat(Column.Field.CurValue);
    ( z! X" ?# x& H  ~2 C            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    2 E' Z2 a/ [) m. v; G  L7 L            w1[7]:=math.max(Length(DrawString),w1[7]);
    , T  F& B* S7 [5 r1 P8 i          end;5 |2 u6 D. R- E: j5 |8 w8 _
           else
    $ }2 c# b/ M  {& i1 q- [. _( \          suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);4 e1 p# s4 z; _6 }+ w4 P8 U, L
           end;( ?0 H- \3 b" y8 F+ H
        end+ g4 H6 s0 X. I" @/ w
        else
    2 E: f% d" M7 z2 k4 S" P- E1 e7 a       suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);. z6 N  a% |" \' K$ F6 O* a, q
      finally+ \7 S+ t  [. m& o: Q. g
        sys.Free;" i3 z' M% g% q6 N3 @
      end;
    * A+ I" E, B. r- k/ q2 S# M. [end;</P>
    3 N% a6 a7 g2 u" E<>上面是操作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-6-12 23:39 , Processed in 0.397998 second(s), 50 queries .

    回顶部