QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3124|回复: 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
    * T' H  [3 ^6 E  W1: array[1..8] of Integer;
    8 H% [6 z+ {$ t) E# l  W2: array[1..8] of Integer;</P>
    + G' w# `4 E' @& d0 b  i<>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);3 j+ C6 |# x& b
    var
    # O; m3 }! i  R# |* C$ y/ V  colwidth,Max:Integer;
    ( W9 u$ ?* O5 Q  k* B% hbegin
    6 c; S6 O" [! l  I6 C% C  colwidth:=5;
    : P, M+ h1 W6 k0 B+ b6 D7 x  Max:=5;+ t3 I( _+ M  F( p
      if not(Column.Field is TBlobField ) then8 k/ e& W  x3 L* M' E- Y
        Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName" S' {& a7 C5 c5 Q# Z
      else0 [% q. E% c7 i( G3 @: U# X
      begin: I# X7 G' ?6 }6 V7 j1 ~
        Column.width := max+50;
    8 W; K  D% \/ L. ~( h: @) v    exit;
      h: [1 l& r0 t8 `  end;+ |/ Z+ p6 m  B3 B" p, _: |7 c
      with Tadotable(Column.Field.DataSet) do
    ' ^1 p, `& V8 o+ p8 A' w. c  q/ a  begin7 @6 A3 t0 m, x
         case number of
    " q. P2 M) P0 \3 B     1: begin
    ) R8 X, ]2 o( Z$ G" c9 T( j          case Column.ID of
    / ^' c& c' i# K: a          3: begin0 }6 h: ~5 a+ f' c4 Q2 y2 ~
                  if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    % D  u; Z, ^. y7 ]! I                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ' A% y( h+ F& ~/ s1 S4 X              else
    7 w" F  E7 o+ H! L, O  b                 Column.width :=w1[3]*8+5;
    2 n8 }1 v1 |' W8 j, i             end;) D8 Q: j  G. J( I8 V$ ^0 t8 z8 L& g
              4: begin  h" R6 R0 Q1 k5 n6 y- {0 f
                  if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then% B# e1 _$ c, D6 ~$ m4 C! |
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+56 B/ h0 D7 f+ H* N% H
                  else3 q1 E$ I6 P7 Q" V( [
                     Column.width :=w1[4]*8+5;1 l# H( @8 n1 ^( J3 Q, E8 W: g
                 end;, h% j) h  T1 n; e! }" R
              7: begin
    & G+ t: ]! E* z              if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then4 K% ^$ s4 _: T
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5. g- I9 p( r4 B- O
                  else9 U0 {( k, T" H  {9 z' i
                     Column.width :=w1[7]*8+5;
    2 Q0 }( G* C# x             end;% o% i# R' K2 k7 O/ D# e
              else
    $ p( X" M( T5 s             begin
    0 }2 m% {# ?- B1 X               first;! q, Q& X( ]- a5 j4 ^# L
                   while not eof do$ k3 J: s: h# T# `
                   begin4 q+ N; `4 _: t" T0 `3 V( w
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);" m; \" Y+ L/ n# h. l2 n
                      Max:=math.Max(colwidth,Max);
    5 Q$ r# Q1 h+ d% H1 S                  Next;
    3 F3 j3 f2 B4 c8 C3 x+ j/ |               end;# n2 L) K- i4 d% d/ w- i' b1 L
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    : e& a  x/ T) H& K* _4 d                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    / |6 W# ~& G* Z+ T9 |7 r               else
    ; Z1 f& i6 S- G4 t                  Column.width := Max+5;: m$ Y. P2 [) M& ?* ]
                 end;
    # q( f$ {5 `. w$ d2 m/ z% A, t8 k          end;
    / l* U& [7 i* S" ^* a  _        end;* P/ i  k$ [- m; m( ]; `
         2: begin
    8 C4 I9 G+ u6 K) Y+ t          case Column.ID of
    $ O0 X! R3 |# `9 V1 {  s          4: begin. u! i/ K6 _8 B
                  if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    3 [9 F" F  \7 t8 o, I                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+53 K3 W5 [/ p6 ~7 u
                  else
    $ z3 {4 ]9 d! K/ V0 s                 Column.width :=w2[4]*8+5;
    ! ?: L, \; f! {+ a1 c             end;7 C" n  P, q( T3 O1 g3 y1 _
              5: begin8 ~- x- q2 m( R- x; a! C5 T% t
                  if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then" |# S- S7 |( p# S3 ^
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5* [4 Z$ X- T. g/ `9 I3 h$ Z# b' ~; z: j
                  else- g* J- R7 y3 h# p6 O1 Q
                     Column.width :=w2[5]*8+5;3 V$ l9 f& {$ W6 T' x4 I: p
                 end;4 _; n  B" U% n  G# F( z/ @
              6: begin
      n! z5 R* Q  t              if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then/ Z8 A* v5 {' ?5 F1 N2 w4 H
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    " o3 w: y9 ?4 \! u2 x7 ?              else
    4 ~( \; U  `. \% a* L( y3 [8 \                 Column.width :=w2[6]*8+5;
    & v: y8 {; P8 E  _4 Q             end;
    0 k$ N0 Z- t5 y3 |: ]" t" G          else
    * C$ ?+ K: a2 d5 K6 \8 R             begin- k! A1 ^6 ]( b7 P7 m. @, d
                   first;3 f1 ^0 `5 ^2 C6 J8 K
                   while not eof do& ~1 u8 r% d# t! O: b: I, s  D6 x) q
                   begin
    + f$ ?* [% F: T; w                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
    3 b8 }; @" r3 u/ D" P+ f                  Max:=math.Max(colwidth,Max);* z8 `) E% @5 x8 R. w. T, f; [
                      Next;( K) k; A( ?! X0 g
                   end;
    * Q- _2 E$ R) t3 C8 m) R" z               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then: j; g+ U  X8 o4 g$ t1 @) L
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ' b; _6 L5 w4 m$ f. L+ O               else
    % z- ~* k6 r  B' M2 Y                  Column.width := Max+5;  ?' }. K- A$ p: x$ N
                 end;! P$ ]. @; n5 x. G# z3 M
              end;
    5 O) p; }3 F! x! @7 |        end;
    2 J6 v, q3 J, o( E  A- V# V. ~     end;0 T+ p0 `$ L4 _. E3 G/ A- H
      end;0 k- M+ H, ~# I) k6 ~" H
    end;</P>
      ^" c8 ~$ O4 d0 x: V1 [0 I3 }2 U<>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);
    , |% U  L, |& t* nbegin/ i2 P3 o5 g; ]7 l8 b  f3 d
      Orderby(suiDBGrid2,Column,2);- S$ T# e4 H9 F& s
    end;</P>6 I' ?$ |0 q% E
    <>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;/ ]1 {! a2 e& w( H
      const Rect: TRect; DataCol: Integer; Column: TColumn;
    / L* ~6 T. P( B  State: TGridDrawState);
    : B  x& J; b4 y# M6 Yvar& ]/ E' `7 Y: k! F! G- E
       DrawString : String;+ n$ S; u7 j; d
       sys:TSysOper;
      P7 s$ _; \0 n( T& Hbegin4 a- x+ q! m6 D9 A8 e( w7 M
       if (gdSelected in State)then+ l0 n9 _0 Z' D
       begin$ L! E6 k# S2 ^4 i( c: n
         suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色
      E5 E3 @/ \) |6 d5 Q   end
    5 O. g8 g# K/ J8 n   else' e/ v8 _9 D! Z! _7 D
         suiDBGrid1.Canvas.Brush.Color:=clWindow;
    $ a5 d" I5 i  a, F* ~, L   sys:=TSysOper.Create;
    ( T  D& F9 v4 \  a   try. J1 }, Z/ w% D4 I% W' N/ s% Y
         if Column.Field.IsNull=false then
    : a, ]& a& ^+ {     begin* z3 d/ z$ [7 v' r& @
           case DataCol of# B: e, q- T* |8 r$ m0 J! q8 M
           3: begin% y% T. r+ p" b6 Y* h
                DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。
    7 @  J* U# O4 ?            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    # h, K$ L9 |( g5 ?; ?            w1[3]:=math.max(Length(DrawString),w1[3]);+ Z, q: e8 p2 Z. ~
              end;, S# p- x/ e# t/ c; H
           4: begin0 @$ C$ A0 h. k! f
                DrawString:=sys.getLoginMode(Column.Field.CurValue);8 \9 j3 ~8 a2 O7 l3 F2 E( ]- O$ i
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    , I( i. ]2 b9 ~" p4 e            w1[4]:=math.max(Length(DrawString),w1[4]);% W: y7 S) w3 L3 g
              end;( [5 [7 C4 q6 A# \& ^# X
           7:begin
    ! I7 {5 {. s8 K- }7 d4 l            DrawString:=TimeFormat(Column.Field.CurValue);
    ' B9 p7 q2 Q% p- h) r& M            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);- t( ?6 k& z2 L& h
                w1[7]:=math.max(Length(DrawString),w1[7]);1 O0 |. I( j7 F6 p& k
              end;( J, a0 G* V& p
           else$ y0 j% I9 T: y+ V1 D
              suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    0 G. j# G& M/ ^5 ?       end;0 H' Y; u: Y5 j% B( i, w
        end0 ^0 k* q/ K2 i* S5 g& _
        else
    ( o- K; J' M; z  g       suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);3 k" m/ Z) N! u3 g# `/ T- i( T* H
      finally* N# V& s! C$ B& s0 P4 ?7 x
        sys.Free;
      [2 q- u: m; l) Z5 q0 \  end;
    $ B8 e8 c+ d* x. F7 k+ e  yend;</P>
    1 U0 T1 m# G7 G  ^<>上面是操作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 07:35 , Processed in 1.123778 second(s), 51 queries .

    回顶部