QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3037|回复: 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# ]2 @7 R$ D$ m
      W1: array[1..8] of Integer;
    - E/ `9 K! o8 Y4 t. j. O  W2: array[1..8] of Integer;</P>, ~5 |  H# }$ d9 u& S/ s( l
    <>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);
    9 v+ E/ u( W7 O2 jvar! i- a- B; `2 N; W1 n& I$ q2 J+ J) C8 l% Z
      colwidth,Max:Integer;9 J6 S+ j* T/ d2 T7 `. d
    begin
    " ]; a$ Y7 _, d$ C; _8 w  colwidth:=5;& S( A! c7 H/ X
      Max:=5;
    " [! `) D/ I; a$ C" x! @, C  if not(Column.Field is TBlobField ) then
    0 A0 \. s  W' z0 T+ |2 ~  {( F    Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName
    2 @6 k+ n' D8 l8 B  else
    : P& J+ E" u+ z) w  begin
    ) v4 O  g/ H3 O% g8 Q( J% O" C( u    Column.width := max+50;
    . ]' {$ T# c. R; @    exit;
    ! j9 |8 B4 q: W) v* m% ^7 j  end;
    ( V* \5 w- [; J! r& b" S" Z( w! q  with Tadotable(Column.Field.DataSet) do
    - W$ \2 s# J! |7 O7 W* d  begin6 `9 o4 g8 L6 p; i' T* Q& r
         case number of8 z* ?; o: x- T+ b$ t% s; H. b
         1: begin" \9 V* C) P. X/ e; q3 M( g2 [- D
              case Column.ID of3 d8 l5 Q4 D. ?5 ~) f
              3: begin. T2 A0 ~" h- `* {/ a
                  if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then) D6 F: S/ u; }6 a3 I  I
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    * U4 v' R; I- y+ }; _/ c; }6 B- j1 ?$ ?              else0 F; l6 }2 x3 @" D9 q
                     Column.width :=w1[3]*8+5;7 D5 C. i+ a, Z" S/ L, M
                 end;. M! U( F6 m0 e6 r+ Z/ U
              4: begin# V+ X# z1 o! K9 L" y; a0 n
                  if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    5 r+ t/ G4 X: X9 p                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    , R' u5 `% ]3 b' t              else
    ; A) v+ M( m- n5 L: {* S3 Y                 Column.width :=w1[4]*8+5;
    ' E0 D- c2 K- ?9 J9 u* G             end;
    1 `* H9 N( c! j; ?: f2 v          7: begin6 v7 @9 W/ K1 l# @
                  if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    9 ~1 I6 c/ l- n- _) ~3 d                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    / e7 @4 B; S) j! X" A0 D4 N              else
    ( `9 y7 B, R' D( o/ ?) o                 Column.width :=w1[7]*8+5;9 }4 T3 Q" s1 m
                 end;
    % Q) A* d2 B8 e- Q$ f$ G/ _+ |          else
    3 `4 ]0 p2 W# z5 V5 g9 W7 l             begin8 j* V* [* ]  `& A) o% s9 w
                   first;% g7 r7 t# ]5 @) l: R6 o
                   while not eof do) g" j' @3 M! d7 ?- p
                   begin  c; S5 ^8 c% S, T1 d8 J
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);; G6 b/ A5 ]$ j. ^
                      Max:=math.Max(colwidth,Max);
    6 `( @: n" i8 M& a                  Next;
    & j; ^  m% ]" {+ |. O               end;7 H) n8 e! `5 u7 o  e$ H
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    . }$ j$ u8 ]% u                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    6 l6 U. ?2 x0 Z               else9 d; q+ D. p* u% g) \% o( S
                      Column.width := Max+5;
    1 ~; ?6 K& U! |1 B1 s  F             end;  Y$ m+ V' U7 Y3 t2 D9 \6 L
              end;7 _4 [, E( B! C$ T
            end;9 f( I' t* l8 \  _4 i- o
         2: begin
    3 i; e, V, _  O) k. q* r$ T7 b. a          case Column.ID of
    1 M4 ^/ P2 i* u+ p          4: begin9 d0 M% o) v  g1 }+ a, @3 b
                  if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then/ u+ e1 t( z6 ?2 K" l" y0 x1 Y
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ; ]+ e3 u* n' L, r4 w% E              else7 e7 r) `& d& ]  ?& G
                     Column.width :=w2[4]*8+5;
    - ?! X! r" U/ T9 Z& u; T% R+ l9 Q! a             end;6 l8 c+ q& m3 }; i9 H1 w
              5: begin' f- r9 v2 |$ g$ u' z
                  if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then* C6 W$ Q' @% {/ G6 S
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    - `2 q0 }. |2 v9 A3 b) v  H1 t( g              else
    + F7 T2 Y; u2 ^% y0 A                 Column.width :=w2[5]*8+5;0 d& `9 Z2 ^- O) [
                 end;
    ! M" }- `7 }5 ~* S3 m; W          6: begin$ ^* U: c7 u# k# Z
                  if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then1 k6 |% G2 x  ^
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    9 s$ g' w& W0 `, s' c              else2 W+ W) i: [2 d& l! d
                     Column.width :=w2[6]*8+5;
    6 {9 c8 Q  g& E# q             end;$ J3 `, |' H9 a; _
              else" e: ?9 \% M5 H- }0 R* n9 M. s* {
                 begin4 O  }0 O, ]$ }0 [  Z. g
                   first;
    3 z1 R* {# P& f* v# N( n3 q2 [% H               while not eof do
    2 p  @  V& E/ A5 Y/ `               begin
    + S6 ^5 W; S( U                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);* Z0 x* Z' G9 k# u; b
                      Max:=math.Max(colwidth,Max);! Z! }, R/ _7 K4 }. z
                      Next;
    , A8 U/ I+ _* A" S: B$ B               end;
    $ A, }4 e4 e$ V# i0 \* F7 E: p. K               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    ! o8 o' Q0 Y# J! u7 i: G9 s6 k$ p, J                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    - Y; V0 m7 ~; {$ v4 e               else
    2 a3 ?! ?; f) n8 y/ C                  Column.width := Max+5;) K! }0 v' v. l9 o
                 end;
    1 A+ B/ p7 k- f! ]' k          end;4 z3 B3 j( ~, X8 s
            end;! W7 @4 M5 K8 }5 O, W/ S
         end;6 H+ q. @* _5 R5 F
      end;2 e; D: @5 v1 g, M& _
    end;</P>. |4 [9 P3 M5 I$ m! s; a' I0 Q
    <>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);
    8 m7 q6 A4 ]8 d; A* K* {* {begin
    . n( P- {3 w. d- P  Orderby(suiDBGrid2,Column,2);& K" @0 K0 J4 _1 ]& Y
    end;</P>
    / C& r' M6 w* L) F) z4 i& K9 p<>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;
    2 s# j- T8 a& k+ X* E+ Y9 p  const Rect: TRect; DataCol: Integer; Column: TColumn;
    , y" n$ K% v4 x0 v8 K  State: TGridDrawState);9 {0 o4 @  z% R8 Q, O( ]% Z
    var
    8 @# i. }( j$ S% _; M0 z   DrawString : String;
    % Z- h& P! l* V) l% j) p/ T8 T( L$ s   sys:TSysOper;
    0 w0 W$ z( \% S5 @5 C1 obegin% ?: O3 Q+ j3 M' \8 N
       if (gdSelected in State)then9 f3 a& y+ d7 X
       begin
    2 D9 d9 T; d% v+ X     suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色8 n  T# P1 q! U3 G  t/ v+ B
       end1 G; O4 L% s- ~+ e/ R$ o" {3 E% H
       else
    $ }$ N/ u6 {/ N+ b1 G, c     suiDBGrid1.Canvas.Brush.Color:=clWindow;' ~9 C' [0 O! ^2 H8 I8 T) ?
       sys:=TSysOper.Create;. B9 r) j3 g* X  }& {
       try3 H# I4 h- m1 K4 D3 P
         if Column.Field.IsNull=false then/ G: R- I0 U6 U. F9 L/ c( h- l/ t* S5 I
         begin* j& ~+ p9 S0 q3 g* ]6 ?
           case DataCol of  g6 F& C+ K1 Q7 J, [
           3: begin4 |$ s" ~' O/ C; n9 F: @) k) a
                DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。* s* L" C. p; y4 u( T( E
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    + O& r' [; t8 Z            w1[3]:=math.max(Length(DrawString),w1[3]);5 k% H+ O+ t/ D% ?: H; n& R% y: U
              end;+ @8 P" z, v5 j' [9 N' Y3 a
           4: begin
    7 r* s# d9 k/ @8 k6 O% c            DrawString:=sys.getLoginMode(Column.Field.CurValue);% H5 [) [' ^" y6 q' l
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);2 B4 c# j7 l% P4 |! {
                w1[4]:=math.max(Length(DrawString),w1[4]);- F- z1 `# E, O5 w3 J5 g
              end;4 H% p9 @: z. \8 i2 }0 o9 L- m( ^% b
           7:begin+ b+ B  H3 o3 l
                DrawString:=TimeFormat(Column.Field.CurValue);- {* [' Z: h( ?
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);6 U/ W+ H7 t7 S& B2 d# y5 R
                w1[7]:=math.max(Length(DrawString),w1[7]);% Y7 q% p: n0 ~
              end;. O( t- I, W  C* g; T
           else" p( L, w7 f; U0 x! O
              suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);1 p% d% y( u9 `# P& l, i, p6 E8 R& A! ^
           end;
    ! }; d/ m/ A- J) Y# u    end
    ; v! |% T/ V% Y  k6 E- Y    else
    3 {' \4 x% J1 h5 _. O2 l       suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    $ v2 Y  \  z. Y: ~  finally% I, V" g: F% \# L+ O6 G1 }, h
        sys.Free;2 R% p2 u5 h$ ^
      end;- F4 L2 H, k) ^6 p5 _6 w+ @
    end;</P>$ P; B- R! ^) F" h3 w" R- J
    <>上面是操作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 06:22 , Processed in 0.384267 second(s), 51 queries .

    回顶部