QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3125|回复: 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
    " i6 d5 }8 R, @/ K3 Y  W1: array[1..8] of Integer;2 z; K/ L. d* ^" I3 P+ L  T
      W2: array[1..8] of Integer;</P>
    * }9 n. O, f9 t<>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);
    1 _4 \$ U. y& Tvar- {0 F  P7 H, @1 v
      colwidth,Max:Integer;0 {1 U& `' L& N: V% P2 g
    begin- q7 x- K0 J0 @1 l6 p- o% ]1 \
      colwidth:=5;/ I7 w9 t- c) C/ {1 y
      Max:=5;  H1 ?& Q* r- o& f/ T6 ~% L
      if not(Column.Field is TBlobField ) then, X+ K5 {4 B! q/ F4 j0 v4 o
        Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName9 n% w/ Z) g$ T; V! y0 A
      else1 o) v6 v* M: j) D  O0 m
      begin
    7 X6 N5 e/ Y, j9 C, M    Column.width := max+50;& R* {4 L3 p9 c4 g. M5 x0 Y
        exit;
    * o) K/ Y3 R% e" |7 C  ?6 u  end;
    ( i* D/ ~) X, `" k  with Tadotable(Column.Field.DataSet) do
    0 z4 a7 Q) y, a/ `  begin, f8 S; ^& \# w7 |
         case number of# w& c" E  E1 |9 T+ B$ \# o# S
         1: begin
    , z5 s4 U& L5 @7 W          case Column.ID of
    2 V6 p2 n" r3 H$ E# q9 @( H- x/ Y8 U7 Y          3: begin4 B% O# i. J/ |2 b
                  if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    ' k+ N  D& @9 g+ S0 @( Z$ c0 @                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5- z. t- {& c3 b0 w# v* ]# j
                  else: Q! U. @4 D9 w: X* S7 F5 W
                     Column.width :=w1[3]*8+5;
    6 N7 j8 p! x7 j3 J& @- n2 g             end;
      i9 \: \2 i2 N          4: begin/ C, k! M3 k  y. X6 J
                  if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then, j- w/ ?# Y/ s9 A: S) y% G
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    & k- q  o8 a9 s              else  X" j1 e! ]8 v0 }1 c/ W
                     Column.width :=w1[4]*8+5;( f6 w  W% y! \5 e5 H9 `
                 end;
    : c' v% w/ n& V$ `# N) Z& i+ E% s          7: begin$ P, f1 P/ d# `% P
                  if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    6 r, }: `. V5 @! n  F                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    . f6 G' W4 B$ A# E! e              else% ~) O, M- Q% t3 r
                     Column.width :=w1[7]*8+5;
      Y4 X! f' Y1 c             end;2 w, _& W6 m: V% l3 I
              else1 q- O' }/ B9 b0 [0 k
                 begin6 ?7 J) p+ W; b7 Q8 X
                   first;. [! r; O: T7 d$ U) I
                   while not eof do
    3 E. ^: a9 b0 Q2 g0 `* o  v1 C               begin
    7 M1 f" ~+ ~: o' h$ H0 L0 y3 Y  r                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);1 @9 c, Y* n! `7 {: J( o
                      Max:=math.Max(colwidth,Max);
    / `5 Y: I% {8 Y. G% Y3 @/ V- A, {                  Next;' l' h0 f- k1 N  N
                   end;
    ( c. p8 }6 M/ M; M7 l" m" I: u               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then9 O6 a" L! G7 Z$ j6 f
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+59 E- I' |5 A  i! Q! Z
                   else
    ' T$ F2 d- a; \4 Q, s" O7 J9 r                  Column.width := Max+5;( O( W1 j, t- S9 F( S0 u
                 end;/ n% H5 O1 M/ O) z& r
              end;
    : \3 `0 ^1 K2 r2 _        end;( A* x* X  v" e  d
         2: begin' s/ i& p" D7 @+ u' [
              case Column.ID of/ C+ c( E( Z& x. H9 B7 J  \2 F. D
              4: begin
    - Q3 a9 M% h+ l! P+ v/ \6 v0 d              if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    5 d8 F& c4 E# K, r                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5, T( w! ^: e! Z6 O; `
                  else
    0 b/ q. Q6 w2 M7 R6 ~" `- u                 Column.width :=w2[4]*8+5;3 c3 i% A1 K' W; M/ A) ^- p
                 end;
    8 I& a$ |/ d: g0 F+ X, w: n% q- O          5: begin1 I/ V$ s( o9 q: m3 I' a+ P
                  if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    " q+ R8 a+ j. e: V                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    9 ^: J2 V- F3 R& h6 m0 y' r/ i) ^+ ?              else
    % e( k8 f/ `6 G2 t+ s                 Column.width :=w2[5]*8+5;! ^: ]8 K$ p7 R1 f2 I! }. S9 f
                 end;5 Q! f% V0 ?, _+ a
              6: begin* Z; g4 v! s$ q) U% V( R
                  if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    " N/ n3 y7 c0 h                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+58 q+ t; p+ n  T/ [
                  else
    : q/ T/ t5 O- G                 Column.width :=w2[6]*8+5;4 J2 C) Q# E  E
                 end;
    5 B; A, q! C3 `& ]3 Q, ?          else' R8 d9 [* {$ f. {
                 begin
    1 V- Z) h0 u8 l% g) k               first;
    ) E' e: U! ?: H2 M1 s3 n* v               while not eof do9 t# R/ d, ]- l- j: ^: n
                   begin
    " ]" J! F2 Q$ i# t3 E0 X% `                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);; K# _4 V6 X/ [# Y% z; l; K+ D
                      Max:=math.Max(colwidth,Max);
    7 _, A9 S4 F/ i2 G( n                  Next;
    6 c5 J: Q, ]9 p9 A               end;
    - N( E" W, h# h# U& u5 `* G7 }3 F9 s               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then5 \9 T. b% f# _& L8 B
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+56 t1 c  D- y( O' ]  V: d
                   else' A( h6 R3 `) X9 ]8 F( u# y) |
                      Column.width := Max+5;
    6 x; Y. B" l5 F- L             end;
    + e" _; R2 Q% d' X. U          end;2 Y/ I. Z. l% W/ j( Y0 N/ ^
            end;
    / _2 T& W, w& Y. W6 b; d     end;: s$ V* ?. J, T0 c8 Q# h8 _+ I
      end;: c5 M) Z) F1 v( M5 L
    end;</P>& q, K2 d( p8 L, K
    <>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);
    * V9 N7 S  o" F- o- ~begin
    # {. b3 b9 o; ]) Y' u/ u  Orderby(suiDBGrid2,Column,2);/ K1 I/ [* Y/ v# m; \
    end;</P>
    - L2 ^2 |5 b5 Q: v<>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;
    ! [4 ^3 P: ^8 u* W8 l# Q5 b  const Rect: TRect; DataCol: Integer; Column: TColumn;& M7 c3 m& D7 y( @5 G  r
      State: TGridDrawState);) v. @: U$ |  Z4 N$ s
    var: s- {* l4 W$ X
       DrawString : String;
    $ V8 X8 @7 b" C4 g% x   sys:TSysOper;
    1 d  r0 Z. Y2 ubegin) Z1 F  ]% S4 Q9 A6 L6 W5 p9 O7 F) z
       if (gdSelected in State)then
    6 e5 E" `4 S: Z/ R   begin8 N, D6 P7 n8 h& ~) z; ]
         suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色6 V" T0 e. K, @, x
       end
    5 E9 v  t/ l4 m* j  x: }9 m   else3 p" I1 l; H' ^5 f
         suiDBGrid1.Canvas.Brush.Color:=clWindow;" U! w% j4 K0 c
       sys:=TSysOper.Create;' h+ b  k1 f; _! U- V0 `/ O0 @
       try/ u5 Z" z  S" q" f3 _) ~, ~
         if Column.Field.IsNull=false then4 ~. m2 S' ?2 X5 q
         begin
    2 y# U+ j+ }  e* B       case DataCol of
    ' C: B, ?1 e; o       3: begin. p6 X0 H1 v; A% k3 i4 k4 |$ D6 o
                DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。
    2 L3 A( l, T  N9 Z6 [1 T1 }' {4 [            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    ) J$ S: ^' {+ F5 ~/ d1 o2 p            w1[3]:=math.max(Length(DrawString),w1[3]);
    0 t* f# _+ x  d; G          end;
    0 n9 ?. [$ H1 G  l9 p       4: begin
      ]" D5 ~$ j' M7 \* }            DrawString:=sys.getLoginMode(Column.Field.CurValue);
    : L+ A# M! P6 Q- A2 \/ T            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);) R+ R* l# |; P
                w1[4]:=math.max(Length(DrawString),w1[4]);# C; `+ U  H3 X- Q$ M+ G' v
              end;2 |& P# }: k- L+ @: b# ?) @
           7:begin
    % h2 ?. e7 H' L            DrawString:=TimeFormat(Column.Field.CurValue);
    6 b! v' x; ?0 R4 J8 v6 K, m% m2 F            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);% a' D4 a. L7 F
                w1[7]:=math.max(Length(DrawString),w1[7]);
    " S+ |; B* O' f6 ~5 s6 N) p. b8 c          end;4 H" v. ]1 D# i- r
           else
    . W% [- z" l1 h: Y" ^  C4 l2 V' z          suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);& Y6 o0 L3 x7 [  s) T  y& D
           end;
    ! x5 r9 F6 B6 m) j8 f6 U    end
    - [1 [8 v- g, A/ x+ |    else
    - H3 j; E/ W- K       suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    " v2 r/ |9 q: n; v+ P( f  finally
    8 n" [3 C: D  S3 y* M; o- h  v    sys.Free;' r- i! ^; Z& Y; n
      end;
    3 f6 z5 \0 c. A# P7 {end;</P>
    8 F; @, m: H& C% ~<>上面是操作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-27 08:45 , Processed in 0.396814 second(s), 50 queries .

    回顶部