QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3056|回复: 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
    ' g# K1 D* I% W) P1 ?& ^" k  W1: array[1..8] of Integer;
    + A; m2 O8 W7 u5 N; T  W2: array[1..8] of Integer;</P>! j4 \* s+ u1 m8 N9 Y5 j
    <>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);
    " U/ R: R4 G& f+ G5 p5 j) {var
    , L. h- h& y$ [3 T  colwidth,Max:Integer;& K# a; q- n/ B( P  L; m0 r
    begin  y1 `" H2 @) g% _( h
      colwidth:=5;* S4 H! R" d# W8 h) _
      Max:=5;
    0 Q6 S0 W5 o' A3 {2 e; k* t: |  k  if not(Column.Field is TBlobField ) then
    , @7 c. @5 D) H    Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName$ m$ ]3 V; L8 |! y0 O& b1 h3 G7 U
      else
    3 l, _' W$ E; q2 }6 r  begin
    ( V7 a: i$ u9 {0 ]( a$ `( i  a. s    Column.width := max+50;; t9 O* D# L8 G: I) d% G8 E9 a
        exit;
    $ k. L! K. i1 r6 l  end;
    0 u) ~4 o& h( m  V+ F* [) F3 H  with Tadotable(Column.Field.DataSet) do
    8 `9 ?4 L2 b; R0 y' B& t/ r6 r  begin
    # E( k# R/ ?1 S: p; L     case number of7 e6 {4 ?3 N. x8 x
         1: begin- i' ]8 @" ]( b: p
              case Column.ID of
    " C! o' v9 |9 H( T# t9 K1 Z  T1 u          3: begin
      v( ^: _7 _4 J' y) Q1 o              if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then8 \( L+ n1 i% `9 s' g0 ^
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5- d" A5 |- V2 D1 A9 A
                  else
    3 j1 J6 O& Y4 Y) a  s' t, t, r% w                 Column.width :=w1[3]*8+5;
    7 {% d+ ?) s2 A+ m  N3 k             end;5 {6 y5 I) f& U
              4: begin
    4 c1 m- g1 E: B4 Y+ S3 w              if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then9 s# L! y  _8 _9 b" a+ X- }
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5$ p% a5 n; g: Q& A6 z5 Q+ Z' y
                  else
    , M1 e" h6 S6 t                 Column.width :=w1[4]*8+5;
    * S( k6 Q  y- k, a' W- Z! m2 {/ r             end;
    ' H$ j% J8 o( P: \- O          7: begin7 R! u0 _( z5 p" T$ Q
                  if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then  S5 y5 s5 Z+ H- r
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ( z2 a) b) V, e& |' o' r              else# x, v: l0 [) K. ?6 U
                     Column.width :=w1[7]*8+5;0 e' ?# i& X8 ?% [0 ~5 |
                 end;- q- s  ~+ x/ M% z
              else! Q# o: b, Z% W9 b7 z0 u
                 begin
    $ }  P# u. c6 y/ X+ w. p               first;- m9 R* v1 @6 [6 h  ~  j
                   while not eof do7 C% Y- N% j3 J) `7 C, u5 J/ r
                   begin
    2 T8 _* W  T" C/ U3 z% f7 [7 O" }                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);) }, J3 w5 s: R9 _7 J0 o
                      Max:=math.Max(colwidth,Max);, ~: R7 u9 h3 b$ ~( O: d0 K
                      Next;9 A/ V# _3 H8 q  Q! w8 _5 Z/ \% q. s
                   end;
    + X3 U6 x$ w: m               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    2 g4 I8 [! _1 p5 t                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5  `% v  A+ r7 _7 W2 o& \  j
                   else
      ]& f; j0 F" `4 G! M2 V1 c9 N                  Column.width := Max+5;, A8 O, l5 A8 G2 M% {. l9 @
                 end;6 n' ^$ x7 U: }& R+ S
              end;2 \% K: G- G  I
            end;$ S  K  A$ B4 j& ~
         2: begin1 P. G) i& ]% @" e+ P/ v
              case Column.ID of
    ; v9 `7 O$ u3 d5 M) R          4: begin
    3 U. `: D6 D2 l! _5 ]              if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    ! e0 l# \" N1 |; Z- Y, y: F                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5$ n1 K  D9 A9 r+ M6 |7 V; [& I" s
                  else
    , R9 {& P$ d  P/ F5 D( \3 k                 Column.width :=w2[4]*8+5;: w: r& C: a, E8 E
                 end;$ X5 m' A, C( A9 W# r6 ^# d
              5: begin
    + y0 @; U" A- ]/ d3 n              if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then1 `8 m8 E% c1 X: p; o/ `
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+55 s2 F! c- {3 C2 I
                  else
    ; M. \& P; g/ _                 Column.width :=w2[5]*8+5;% B. }6 s& J# Y5 S
                 end;
    : M8 ~* g, r7 N          6: begin; q; }- d" S% _- E9 y
                  if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    : x$ v$ s0 J" K                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+52 ~+ {  V1 ~! O' r) x/ [' K
                  else0 N0 x' {/ x& [
                     Column.width :=w2[6]*8+5;# ~  Z1 m( B* C# |, Q8 {6 z& |
                 end;" J) X) ?" J% J5 a% q& R" d2 U
              else7 j, l/ o* X2 i
                 begin
    3 [( l! y# P! v               first;
    ' }9 O, z8 X' |6 o5 q/ R               while not eof do& o) H+ J8 v* S5 i5 f, W4 V
                   begin; v+ ]/ z$ X0 N; @- H
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
    3 g& h7 w: B6 j                  Max:=math.Max(colwidth,Max);) f' p8 \/ F; @, o, x" Z
                      Next;# e- i7 m  O; X8 ^% Z
                   end;
    ! I( e( f, j, ~* v( Q  L; o               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then1 d" e6 A" J5 o. ^( M7 d/ |( V4 e
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+55 ?' S5 e' w$ ^0 e0 `0 S$ h
                   else
      `7 [1 u9 i" r                  Column.width := Max+5;
    * N6 t/ C* R6 r$ ~% g- S3 ^  D             end;5 J$ e9 R5 s# w" j8 n2 h1 s
              end;9 P4 l$ f/ m9 w8 c3 S
            end;
    3 p4 m6 C$ @( t5 o# L     end;
    9 W- ?3 S8 i% B7 F# p/ I  end;
    2 W% r% E- t; ^4 C# q* X+ ~end;</P>
    ! W) Z4 u5 B8 U' F+ J; w<>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);
    ( \5 j* m9 G7 P2 `- @2 ]3 m/ v6 ]begin
    2 o0 s$ T# }- x; c* ?" x0 r  Orderby(suiDBGrid2,Column,2);0 s9 A" G. p) R" V  n" S
    end;</P>
    " q& H2 w" L* t, ^' Q' r<>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;5 d8 t9 T8 e' Y! z2 l& M. ?+ \
      const Rect: TRect; DataCol: Integer; Column: TColumn;
    ' B3 Q4 B  ^; s  State: TGridDrawState);
    3 n5 B7 K. s' ]var6 b  J. \% E, v" Y: P
       DrawString : String;, [1 C; }) D6 R, y" a7 H$ H7 Y7 _
       sys:TSysOper;8 u& T0 m: G- U0 G4 L# y4 @
    begin
    9 s. H4 @, Y: @$ p   if (gdSelected in State)then
    0 `6 g* d2 L8 i8 b/ ?   begin
    , {/ K  @; ?/ T4 ^8 r% g+ E% B     suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色* ?1 l4 E% r& f& }# U- H4 [
       end
    . G0 u8 S* ?* W   else: l/ U' Q, W/ I- s' j; M/ S
         suiDBGrid1.Canvas.Brush.Color:=clWindow;; V4 c# d2 i( Y  C0 B: H3 ?* O5 R
       sys:=TSysOper.Create;
    : M& I+ N  T. Q0 B$ c( \   try$ w- F" M6 T0 l6 Y
         if Column.Field.IsNull=false then+ G) R! s( x/ s, `5 r* ~
         begin3 v) k9 L% v- o: v% F. ?& k: ~
           case DataCol of' J6 l: p, n9 I
           3: begin1 z$ X4 F6 a$ u' W
                DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。0 M. O3 ]1 B& m9 r
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    & X0 w) D8 L, m            w1[3]:=math.max(Length(DrawString),w1[3]);
    " O, I6 L: ?) n5 l! L- y: a          end;
    4 ^5 p- J3 y8 p       4: begin  p' ]* R; d1 w/ [2 Z; b
                DrawString:=sys.getLoginMode(Column.Field.CurValue);% u, S( `/ T: Y" {% k
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);. y; n+ q9 ~, R8 W& y0 _
                w1[4]:=math.max(Length(DrawString),w1[4]);
    ' |7 w4 G6 c' y1 i3 J& d          end;! }% c1 N2 X$ B+ r, y
           7:begin3 Q1 x# W. ?  X# e' k, _
                DrawString:=TimeFormat(Column.Field.CurValue);- w' Y  e* d; k$ e
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);: Q) z% w1 R6 C+ p3 ^+ a
                w1[7]:=math.max(Length(DrawString),w1[7]);) W5 c: C) n4 Y/ @7 q. ]! [4 d
              end;
    " L% _- B: U! k4 q' \       else
    & z$ E/ w' }& L' t) ^) c9 ?          suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    3 O& e. N9 p" L4 B9 P. ^! O9 D3 \       end;. |) P" N7 _. K
        end8 E( c3 g3 t8 M+ y4 l9 i! i
        else9 z4 x6 }) \3 c: c
           suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);4 p& E7 h7 j9 U) X( {
      finally1 S2 D) ^/ S  J' h" o/ d" P) Q# Q
        sys.Free;7 @' i3 q4 c# a
      end;
    + S$ o# ~6 g1 Zend;</P>/ j+ V+ V$ F! h1 g/ V8 p
    <>上面是操作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-11 18:12 , Processed in 0.380952 second(s), 51 queries .

    回顶部