QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3039|回复: 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 s8 C* Q$ S+ G$ P+ ^( \3 _
      W1: array[1..8] of Integer;% D" O( |5 L0 S
      W2: array[1..8] of Integer;</P>1 h3 r& T' I" O
    <>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);
      _  N7 Q5 Z* {var
    2 p9 s: k) K3 M  colwidth,Max:Integer;
    * }% {: X# m/ hbegin( A2 |+ M7 z5 m; Y
      colwidth:=5;% \0 W' @: T! i; v/ ]
      Max:=5;3 b4 n  V7 w1 D, S
      if not(Column.Field is TBlobField ) then  N' \3 C7 c- X" u* ^& [
        Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName8 L& V1 H5 k" u! ~0 Z7 \' v: P: L( U
      else3 p5 A6 t* A& q; I2 ]- R" T# O- S
      begin1 E! \% |/ E1 f; [$ U8 x
        Column.width := max+50;
    ( L' W8 x) _0 P8 B7 M    exit;
    * |; F9 `1 {" H# Z: U0 u+ J+ U5 _+ k8 T  end;
    # k9 L5 I. p  n: l4 Q  with Tadotable(Column.Field.DataSet) do- V. @( s* p+ l  T4 |/ W( u
      begin$ h& k% r3 r5 \$ C, t5 |, ]
         case number of  M, f) y7 b; m1 @3 e6 e
         1: begin
    8 y$ _: u. M) s1 d3 e: n          case Column.ID of' a6 m- B8 \" P8 u
              3: begin
    ; A% k( U) s" N) i5 ]              if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then. R$ I9 `3 q  N1 e, i' ?
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    . R' g; v/ Z1 `/ W- h# ^. u7 ]6 Z              else
    5 ^* v6 r0 j' t0 H                 Column.width :=w1[3]*8+5;
    2 J" o2 Z+ [- k9 W; {             end;. Y7 s: S6 t8 ^6 ]7 g. S8 G5 @
              4: begin4 B; N( X3 K6 i4 }: D0 j. P
                  if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then8 e& `1 k: q* T4 C# L! G5 G/ F) _
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5' t! T; q* w2 q4 z! m0 G5 f
                  else+ D7 |( @3 V; `) y- [" t8 ?
                     Column.width :=w1[4]*8+5;3 N8 @1 x! m: L; j1 s; \
                 end;
    2 E; R  ?) G  e& x          7: begin
    ) g5 f7 l# O7 B8 L, F              if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then4 u5 r7 H+ E: A5 J
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    . \  F6 ^5 L+ T$ c$ g/ A              else
    ( [, E, b1 }$ C3 r% ]- _                 Column.width :=w1[7]*8+5;
    + u7 y2 [. g. d             end;
    7 B, j; `% ?2 [' C. P. W          else4 R+ d9 g( z! _
                 begin
    , [2 E" L) W, q8 x9 E               first;
    ) W8 I% _7 f* g               while not eof do9 \9 F# m  B( n" D! L, X. ~
                   begin5 n, N8 @+ E4 D9 G, f
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);/ I% _# L" w7 ^0 Z& }0 V
                      Max:=math.Max(colwidth,Max);
    2 `8 j5 o& d. o0 E! T                  Next;
    $ V9 w6 J1 M4 P/ i               end;
    & ]0 w7 A, U" z- e  E3 r               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then3 s3 Z7 n+ C3 O6 u. f& @6 D
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5. W9 v, [8 a3 t: }/ Y7 i/ U3 O, O
                   else4 j9 h6 b1 @7 V, j+ j; x
                      Column.width := Max+5;$ I! P5 T0 t- L% v# ]" N# b) ]
                 end;8 l$ F& s+ t( E4 U" a( [
              end;
    - v& O% y* s/ M2 L4 s        end;
    ) F' I% ?" k3 B6 |' u     2: begin
    6 j4 K8 n( L3 n& J$ f# h& F, p* l          case Column.ID of
    & T% z. f- D$ K  G/ T          4: begin6 S& J( W; n. X5 B5 ]0 ]' A* ^
                  if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    5 E, q. i  e! V9 C: n% Z                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5( S! |: p, ^" C2 [' l4 G! f" g
                  else3 r; J+ R1 A& E) ?8 r) h+ P
                     Column.width :=w2[4]*8+5;0 a- _; i% ~8 K- i; R7 I9 q
                 end;2 r$ r8 [- Q1 l" _- Y' |& b- d4 {: a
              5: begin" C- j0 H1 K# Q: D2 K" x# ?0 X
                  if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    , L5 ~9 b  b6 @# ]  v1 K                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    2 }6 D+ N: L+ T8 i* C+ ?  v              else6 f' Q6 w  [' W1 h
                     Column.width :=w2[5]*8+5;
    , ^# T( s/ x4 M             end;9 L1 A, J) s- D
              6: begin
    * z$ J& L! w  l1 n! B              if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    6 O# l; [1 J, I# \% @% V, X5 x! n                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    3 g1 }/ m  x# G5 h4 y              else% A* v1 f" u) b9 b2 [) Q
                     Column.width :=w2[6]*8+5;8 p% ^0 v# {. Q. P7 C% U
                 end;( N( A/ J# C) M
              else
    & ?: w3 \4 d; Y8 u7 c             begin
    6 o& S! E# r* S               first;
    ) z; {. C6 ?; w* x; p               while not eof do
    " B" A- C! T3 B               begin& b9 ~: n" x9 B6 ^
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);  u3 I; t2 R$ l0 Z
                      Max:=math.Max(colwidth,Max);: [/ y, m$ |; H3 R+ M. c- ~
                      Next;
    / m* [* F, |. p               end;! ^* d5 n9 T. Q& p( C" Y
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    / L/ c- l5 l( ^2 _: E2 j                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5$ B% \- b* d3 \% j6 k. N
                   else
    % d/ i. D% q& G) i                  Column.width := Max+5;6 k% ?9 F; l3 X8 l( Z
                 end;' x% L1 H' O7 p  @1 @! ^
              end;0 [8 n& }9 [% H! A9 Z0 A
            end;: N. H$ n: q% F" a8 Q
         end;- \. q% `; a2 W7 `6 `2 t4 D/ ~( f
      end;
    " v" h& ]' j  {) K! o) C# bend;</P>
    # K5 Y& y- {; o- K8 p<>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);
    " A4 Y5 i2 ~& Q# Vbegin3 t& X) _6 o4 V- x
      Orderby(suiDBGrid2,Column,2);: M) Q6 v4 D1 Y, {
    end;</P>' `% v1 U7 c, H0 t' Q
    <>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;' l% u" u( R% E6 B
      const Rect: TRect; DataCol: Integer; Column: TColumn;
    ( x8 F9 ]7 Q% X4 m  State: TGridDrawState);) W% z: C) U1 O, N( M7 m0 {, ~5 a
    var
    $ h3 j( \. L- h# ]4 u6 t0 I; ^   DrawString : String;
    & e. h$ f3 C% b9 [4 W* E   sys:TSysOper;* a8 c) \" @; T4 S% I
    begin8 U1 R) B" F* F0 c. t+ p
       if (gdSelected in State)then) O% {2 m& F3 H3 t* r/ L
       begin7 q3 w: L' U% I
         suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色  t% f( y) A  S1 E& A/ p0 b
       end
    & F" d: ]# j# U9 y+ u  n: z   else
    6 H$ |! X# A4 R, s1 |     suiDBGrid1.Canvas.Brush.Color:=clWindow;
    8 R/ k# m: m: R+ ~: z   sys:=TSysOper.Create;: T. l# H+ h& G2 s+ l
       try
    % a* z: N3 v# l% q& |     if Column.Field.IsNull=false then$ ?+ u' X" \& u- g( o8 s1 d
         begin" M2 t. t0 `  I8 n  `* g4 u
           case DataCol of
    % n3 B4 Y; j: P& E3 a: @% X) s       3: begin8 a2 ~: t7 l2 {$ ~; }' k4 c
                DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。
    3 r" q8 w; ?/ l2 X' D5 X% n            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);- r# V, `8 P5 X$ p0 a
                w1[3]:=math.max(Length(DrawString),w1[3]);+ g+ Y* |0 F7 i, f0 P. o6 c
              end;
    & f5 B) h/ L' d       4: begin! i6 _. i% T" E% X9 }; W: C% d
                DrawString:=sys.getLoginMode(Column.Field.CurValue);) [$ Z+ ~. `1 ?8 x$ m7 |2 f
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);, i; ^6 D: u: V- Y2 p  A
                w1[4]:=math.max(Length(DrawString),w1[4]);6 t9 H% m& H$ R
              end;& ?% Q  A6 [  |
           7:begin% \* j& m- D% S" a4 L6 r8 O. m3 J
                DrawString:=TimeFormat(Column.Field.CurValue);- q, g0 z# S" b! y% ]
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    1 b, C# n3 w" k; e: e  T            w1[7]:=math.max(Length(DrawString),w1[7]);* h! k2 ^/ i9 l# S) h( P
              end;. A4 d, s/ o8 ^$ h% N7 d- l
           else+ j; v% `+ t% M4 y
              suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    1 J* `6 I6 f0 u       end;( N  R4 Q) a0 O8 k& u
        end
    ( j3 `/ h8 K2 g/ @    else
    5 w( D5 z( A# s- G- f! ~0 P+ F       suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);; a! y: N/ @* s) h+ c7 u
      finally9 }+ Y. ^. g0 V
        sys.Free;9 G0 ~& m- _1 M( _
      end;/ S, G8 T1 I) J. B4 h% t' @" }
    end;</P>0 V- \6 S# w/ 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-20 11:49 , Processed in 0.452944 second(s), 51 queries .

    回顶部