QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3073|回复: 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
    1 o* v( D2 t' {- y  W1: array[1..8] of Integer;. v1 i# f) \% R, ^2 y
      W2: array[1..8] of Integer;</P>5 x9 \; l' s% Y+ S
    <>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);+ t* J/ ?0 b' ~* \5 C* D4 ^+ \/ {
    var' C3 ]# B8 e6 V. d6 l( q
      colwidth,Max:Integer;
    " [" b- F' I) p$ T/ ebegin
    - L! S0 l* E9 s8 t5 \  colwidth:=5;9 A9 M; h' b$ _. E% `: w
      Max:=5;! l# s$ i+ w' H
      if not(Column.Field is TBlobField ) then
    , _) t, f4 {2 u* s; q' i5 h% R    Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName
    1 d+ V3 P4 ]# X7 V3 P( ~( P( T) U  else5 K' B8 X7 d  C0 I: q( [
      begin5 T* W6 N: M3 ~8 v( M) j' u1 T  I
        Column.width := max+50;
    & R! X6 Z( N: B; X2 j    exit;
    $ N- [% f  m4 }+ D: p6 s- t  end;
    # Q/ f2 U% ^$ [: E  with Tadotable(Column.Field.DataSet) do) S# p# `  k7 X* u5 j
      begin
    ) z! a& c0 E* j) B5 P1 t     case number of
    6 t$ ^- w: u2 c& R     1: begin
    3 M9 e8 [5 D4 i% ?* \- S- }$ I          case Column.ID of
    / ]: l+ p$ u2 z9 q9 Q! G- k3 j6 R          3: begin
    4 M7 V5 |8 e$ U7 }+ O              if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    3 z4 y% E6 r$ \+ P4 j# O3 Y7 v" k- w                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5& `( c; `: x6 J$ w
                  else) I8 n* P8 V6 u3 m
                     Column.width :=w1[3]*8+5;6 W4 J# u, l' M& k2 i- _
                 end;
    & I, ?  l& k: \$ m! j0 t4 G1 r. ~- v          4: begin
    ; G- R# |# C0 P2 r3 U) {: i              if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    & K: L; ~3 t! u7 a& T# i1 n, Z                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5% ^( e7 m& ~. j" S0 N
                  else
    - K, u. P& d) X* K                 Column.width :=w1[4]*8+5;
    1 Q; L# q3 P4 B% ^/ l$ L             end;
    ' l  H  ^& v8 F, e          7: begin
    : N( i  d5 ^) G- j" |              if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    3 \* [7 g4 R: W7 a5 s                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5$ ]* z, G9 P! ~5 _
                  else
    ' }6 c& u5 i& `                 Column.width :=w1[7]*8+5;
    ) Y2 I6 @- }3 ?/ y- L             end;8 I3 e" T! B) V& y( k$ L' u
              else
    % O# b8 N' o$ d8 P6 B, |/ ~, ^, h+ L             begin6 m2 V+ ]- \7 w8 A* B; ^
                   first;: m+ h# f" e' T" |9 X& l
                   while not eof do
    + L* [5 L$ L& O( n; \               begin
    7 a$ }* f9 V7 y1 ]0 v( _( n8 m! Q                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);- l5 M. G$ F/ f, E" j( o
                      Max:=math.Max(colwidth,Max);
    2 h  i, l9 b9 D) D$ ~4 h                  Next;. ^/ Z7 h! h, n* V* h4 \
                   end;. s$ G! X& C7 C0 L# g; D' I4 M
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    # a" ?; }$ ~9 J% L, M                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ! |: _2 C' s9 A, z8 @2 {               else
    0 N: q& J: |6 J; l+ T8 [: w1 d: i) c                  Column.width := Max+5;1 }) F* @, h6 X/ k: ?: _
                 end;8 c6 A0 y) n+ O6 `8 ?6 k
              end;
    % w2 \! L% ^% g  z        end;3 L+ n& J4 C- A5 E9 D6 k
         2: begin# B! |) p; J5 G' I
              case Column.ID of1 w3 D8 U# o; L, ~6 S
              4: begin
    ' p: X& s- ]/ g" O2 s* N              if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    . R/ R1 Y( t8 |' S: n; D7 z, ?                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+54 M' r5 p. Z" C/ C
                  else, g% V$ R7 `* ~1 z
                     Column.width :=w2[4]*8+5;
    3 U( n' z! s! O; j  {7 R( \$ t             end;
    3 _5 U8 f5 D0 ]          5: begin: c* h& t1 W% N# s$ ?' X
                  if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then* k6 v" P4 a6 Z4 w" u; T9 T
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+58 q0 ]( i7 S( m$ p( t+ Z: ~
                  else: A8 K) I! q( q# g+ }
                     Column.width :=w2[5]*8+5;6 Y, Q* v$ B: x' v
                 end;7 N; B+ v2 {- `* e
              6: begin# X6 Z' w8 O! C/ D' q7 i
                  if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    : u3 }9 A3 u7 @7 i) R1 U1 _                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ; M8 _0 o$ Z0 K$ Y- `: K: G              else
    1 a" s  z7 h) |                 Column.width :=w2[6]*8+5;
    2 k, N4 k/ w7 T             end;
    . Q, g) g6 ^0 F" d          else
    0 M! D( |% t1 N             begin0 S8 E5 t! n9 m/ w5 N; u9 _
                   first;. E) S( a7 v' j$ o! k
                   while not eof do6 F( @7 N- R) c0 W7 s7 K3 [( k
                   begin
    8 `& D) P  {7 V- ~& E) o% t7 O                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);2 f7 c; G9 C# c- f) ~* Y1 A
                      Max:=math.Max(colwidth,Max);" L! H3 N1 M/ S& d, a3 A, v9 s2 U& {
                      Next;0 x  A$ H& L' t' c: ]
                   end;3 m: D( q+ g% L, j- V: {1 i
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then3 N) L: x2 l0 e- _% Y( Z
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    + d* D* ?# A2 {+ @# N               else
    / _3 V" A% N7 V3 q  D                  Column.width := Max+5;
    3 E0 z$ ]! ]8 K             end;- p, s4 V  m) {& A: p9 D: B
              end;
    4 a8 l! g6 S" a7 n* l        end;
    9 }/ y# X+ z) A- t" u0 R  m2 {- y     end;
    ! \( T. @* Q' B) \8 F  end;( P. z. D& T- g$ G2 m
    end;</P>
    5 R7 e2 p$ ?9 z<>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);
      u& C) R+ s5 e. }' m' c) Fbegin
    $ j1 @0 W. C7 Z1 ?0 ]' h  Orderby(suiDBGrid2,Column,2);$ W" u2 j5 c4 n) F8 g
    end;</P>
    6 Y" C! _' E" {0 D; U  |: g<>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;
    / D2 v1 k; K! L. P# B3 O( }( y8 d  const Rect: TRect; DataCol: Integer; Column: TColumn;7 @, [: ^' }) {2 ~/ N( w6 p- e; s: ^
      State: TGridDrawState);
    ' `/ g5 T& T1 m' Zvar
    * ]& g& v; i4 l! q. J   DrawString : String;% L/ H8 L  r$ }* d- y; W- P* _0 `
       sys:TSysOper;) ^6 h# ]# B8 |
    begin
    $ n& y1 F# ~6 K9 M% r0 D5 ]. {$ x   if (gdSelected in State)then! O. x0 z( O: `4 I0 e
       begin3 A& s# E/ [* T3 g! K. g5 i7 E
         suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色  w/ @' c: K5 q8 t
       end
    # U8 q( J8 i3 g- O   else
    6 z' e! I) g+ J3 G/ R9 J) p     suiDBGrid1.Canvas.Brush.Color:=clWindow;5 s2 o' R9 ]+ w+ }) c# y
       sys:=TSysOper.Create;9 A% R6 w, b) M5 z6 d" P, S, {
       try! V6 W4 J% ^% w
         if Column.Field.IsNull=false then$ O8 ^; I. q( f- D7 ~
         begin! w" O% @4 ]% }& x6 S+ n
           case DataCol of3 a. T; v4 i/ k8 C% W$ ?
           3: begin
    * \1 e  f% ?/ u) ]$ G  ]9 M( F! A            DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。$ @$ ^1 Q3 G3 M2 L' g1 s/ l
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);* C) W& X7 ?1 _3 b
                w1[3]:=math.max(Length(DrawString),w1[3]);
    - ]7 e8 C9 }1 {, v  J* }3 ?          end;. d* |" g, C1 }
           4: begin5 f/ ^5 u1 Z8 C3 Q
                DrawString:=sys.getLoginMode(Column.Field.CurValue);
    : R' t3 W/ ~) `6 e  c- A  S            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);( a" v6 F) a* F
                w1[4]:=math.max(Length(DrawString),w1[4]);
    ! G. ^! K5 W# A( Y5 |          end;
      B) ^6 C$ o- X! l( A       7:begin
    1 m+ i2 A. l5 k0 x7 L            DrawString:=TimeFormat(Column.Field.CurValue);) U2 ?3 c8 R3 L( O' }# S
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    2 z1 z4 Q- P. r- `* A            w1[7]:=math.max(Length(DrawString),w1[7]);3 Y" {9 P, e! G2 h$ s* d2 f
              end;9 X) [$ l1 M; J( P& j* ~' o% f; ?
           else( L# [5 F6 ]( e# I' e
              suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);: h& Z) A2 H+ r5 x
           end;$ O2 R7 ^8 c. i4 }4 H7 f* s6 L
        end/ n1 f; E9 H$ @0 P$ j
        else* _6 F4 ]& F$ H: K+ |! N1 N
           suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    " [+ r$ m4 P# Y) q  finally% H& j$ ~/ y: ^7 i( A# l: j$ P2 `, k
        sys.Free;6 B/ u, P0 g% h9 E
      end;
    ( A8 y4 [: B. g4 a1 p( ~  z1 Oend;</P>
    + z7 |3 {6 `- J* ?: D( Q<>上面是操作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-7-21 03:50 , Processed in 0.378601 second(s), 51 queries .

    回顶部