QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3121|回复: 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
    : J+ @" ~4 ~2 ]/ s4 W6 X. w- ]  W1: array[1..8] of Integer;
    4 C" H3 `/ }) l9 x# f) C  W2: array[1..8] of Integer;</P>, ?7 u$ x5 t: U( k/ ?+ I! ]8 w
    <>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);
    0 L4 G- x; ^* d) {: Hvar1 D! F( }. _+ N7 y+ g) B1 t
      colwidth,Max:Integer;6 T- b, k# P) D$ m
    begin
    ' S* E; I3 @% X  X, b5 Q. j7 Y  colwidth:=5;: \0 m+ K3 N+ Z) B
      Max:=5;
    ) J3 P0 X; Z# I  if not(Column.Field is TBlobField ) then
    # v, W1 `) ^+ t  L    Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName6 p' k% l. ~2 w9 v$ `
      else- {7 O; k0 L3 Y7 r! {) U, O* c
      begin
    ( D8 a, X2 c+ V# C( u% l: l, A9 l    Column.width := max+50;
    ; t! H6 i. E4 t; R3 ^- `    exit;
    , y0 H; f9 j8 [1 M, d  end;
    $ P% G6 G2 ]  m' `1 t. [8 A! M( C$ w  with Tadotable(Column.Field.DataSet) do
    : u2 y/ z0 A% u: K  begin
    * v9 m; P/ K8 J" _     case number of
    0 b# S, d3 {7 o1 F5 t     1: begin) J2 b0 I* b; g" T6 ?
              case Column.ID of
    ' [: x7 _/ ]  w5 c# \          3: begin
    8 O: x. Z. _" ^              if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then/ B/ z- Q1 x6 i4 X
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5: {# K3 K2 I' `" Y
                  else) B  b& O- s3 h3 S% O
                     Column.width :=w1[3]*8+5;& I) z; d, d5 s) Z
                 end;
    # z) w: t2 F7 N          4: begin
    2 a3 E, D: _& Y( Q% u7 K- q& e! Q              if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then& x: T5 `5 c6 ]0 e/ U* v- z
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+51 D/ j: Q# l: A1 [8 b6 B- U
                  else# u/ }% i  ?" x" C2 Z7 {% v
                     Column.width :=w1[4]*8+5;
    ) J7 f9 I6 y: r$ e1 e. m             end;
    ; x* ]8 p* {( k7 u          7: begin
    & r4 L* W% A& Y6 ?( z) }  f              if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    ' h, }1 G5 d( j' W4 t                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5% q2 k6 z4 Y* y- T. M" I2 A
                  else/ ^; `4 l6 c/ k& {
                     Column.width :=w1[7]*8+5;  S* y- D/ n$ z2 E7 \. s, y
                 end;
    1 M. {8 {  ^8 o$ [0 V3 Y          else. W2 y& M$ N3 O+ a
                 begin
    & T' C  q5 L/ y, o               first;+ o" q: e3 Y, `
                   while not eof do2 w9 P" l9 R5 O( i
                   begin
    % W6 K# S* O+ ^, h) z) i                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
    . m: e9 {2 b% B+ e                  Max:=math.Max(colwidth,Max);
    / [$ U4 b) h8 K                  Next;
    ( J/ d4 K; a6 F" l) C6 N' t               end;- o' k; d" b8 n* `
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    ( Q3 R: T5 Q! D9 x0 b                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    & J  t4 b9 q. s. W# ^+ ?' j! o3 K7 C               else5 o5 {. O* R) f$ h$ b
                      Column.width := Max+5;9 C9 R) r0 S9 g: J  ?  z/ ]. k* r( f5 [
                 end;* o  v! @% q8 x9 z
              end;
    , ?; D- q. \2 Y2 A        end;/ N$ o$ f  ]) A6 B, P# w
         2: begin. |5 V# J) Y. N8 O- ?% M
              case Column.ID of
    ) \: _+ c1 l, q1 B5 S3 U          4: begin! N; y1 q6 t: u( i5 k- V
                  if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then3 K6 `; x% N& `7 }% i
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+53 _2 L$ W# B) j
                  else# U1 K6 e& r* n; m$ k* v/ j1 q8 i5 U
                     Column.width :=w2[4]*8+5;6 M# x- P( ]% D, b
                 end;- o$ s1 _: J) h
              5: begin, t4 _) m6 }( f5 u9 T
                  if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then( e! G" h0 t3 H% `
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ; {3 c% s/ R2 G" _" j              else0 ]+ d, P; a" T! N* l0 r+ k, @, t
                     Column.width :=w2[5]*8+5;4 ?1 r5 {) n- d1 o  R
                 end;
    4 J4 Q/ I! H3 G; |7 V6 \8 l          6: begin, c8 k; Y" h6 q0 S
                  if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    4 o; j8 L+ G9 r. @4 N7 _                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+55 ?. l2 l( ^2 E( r5 {
                  else. c  h" {5 e7 Q+ P) S5 G1 K& s
                     Column.width :=w2[6]*8+5;
    # N( y0 M/ R/ S6 Z: `# f             end;
    0 {* F( _8 l) U          else2 P3 y0 v4 F0 U0 O% t) e9 @, S, _
                 begin
    , y1 e# M9 D6 f  J               first;
    ' f4 I- ^) L# J               while not eof do7 J2 n5 i7 o2 H) \# V
                   begin
    6 E& Q: `0 v6 J) y( W2 j6 L                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
    2 h5 D' i9 I$ X( M% F                  Max:=math.Max(colwidth,Max);& m' W& }) J- U" J# E# Y
                      Next;; B8 K& E- g; B( t$ O7 ^
                   end;+ _* I8 |, I1 `5 ]0 T5 L: I) C1 E
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    / H" z0 m4 e! H; A4 m# r, r                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    1 T" L; }  n3 ~9 p               else
    5 b1 V) R& ^3 Z8 _                  Column.width := Max+5;; a3 z( }' v9 X* `# F5 k3 j5 p
                 end;4 q* t4 @5 t, h2 y1 M# W0 x8 O
              end;* X, {; w' v9 B1 ?- I( J; o
            end;  `- W/ L' g# o3 j
         end;; K) k' g4 ]/ U! G+ d" S
      end;
    % r# \# K$ o: @8 Cend;</P>$ T, Y% ^  B. Y! K. \5 s4 q; m, w
    <>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);
    6 Q9 |. q  p0 u" U; i2 A7 x5 Zbegin
    2 ?7 V% |: p2 s, Y  Orderby(suiDBGrid2,Column,2);7 g  c$ \/ O/ H9 K! {
    end;</P>
    4 n5 F% @& H1 j: a' n6 ]0 C<>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;
    4 J9 X& r; V! T- C: {0 }  const Rect: TRect; DataCol: Integer; Column: TColumn;4 g& i1 M/ g) I! `
      State: TGridDrawState);
    0 H7 O$ y7 J( qvar
    4 u3 o6 l; `! D! }+ f   DrawString : String;. d; r, i) Z2 L3 k
       sys:TSysOper;
    6 H7 F. a4 I2 R" \1 }9 nbegin
    2 f5 N7 ?; j: [/ R9 ^$ h% S   if (gdSelected in State)then# R4 {, Q" y/ P! S) ?* S
       begin
    1 q% o4 Y% P- h     suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色7 d- p# C' _$ b
       end
    , E/ a8 v+ `3 G! v+ W8 X   else, G: D  S' n7 w1 ~* J- g  r
         suiDBGrid1.Canvas.Brush.Color:=clWindow;
    5 a! i$ @: K2 U. S% x& c   sys:=TSysOper.Create;7 Z& X" @6 L0 @( Q. ~- a
       try
    ' M/ U, N/ x( V' X     if Column.Field.IsNull=false then: G. N% }8 n3 Y/ S4 A! ^7 }
         begin
    * D& I$ a, N3 Q2 }4 O2 [- i       case DataCol of
    % v0 {9 ?3 S  F0 x3 A( s( m       3: begin
    % U7 l8 j' d! o6 A; y4 [# s6 g8 E# R            DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。
    9 U2 Z: d2 o( x: h: @# K  g0 B            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);5 J5 V. x. S% ?' C9 K
                w1[3]:=math.max(Length(DrawString),w1[3]);
    2 z, Z4 t- X  b; T* R3 S, n          end;
    $ B; g) n3 D. g  ]       4: begin
    5 h0 W+ v3 ~  Z/ `7 i0 r4 L            DrawString:=sys.getLoginMode(Column.Field.CurValue);
    * n+ C/ {" r1 N1 c. ]            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);- _; ?# g' L8 P' g% @
                w1[4]:=math.max(Length(DrawString),w1[4]);
    1 V2 q- r: N8 x5 t% _          end;  o8 U+ C1 y6 V5 s& A
           7:begin
    # Z4 U6 j/ H* @            DrawString:=TimeFormat(Column.Field.CurValue);4 p7 c  N: m2 @8 k/ }
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    5 y4 ]$ F! o( O9 R* r. Z            w1[7]:=math.max(Length(DrawString),w1[7]);
    + w, B: O- b- e" A/ x. h. n          end;  ], X5 n/ U& d  G% K5 ~' y- t
           else  m: }, m; U% f  H9 A# ~/ N$ U
              suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    9 V" Z3 d7 ~# b) k3 s       end;
    / M1 O/ h" [, `+ X- ~    end7 z! e- k/ X* |: t
        else
    6 B9 M: ]% P0 i9 B4 I+ ?7 {2 s       suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    9 J0 r+ Y! n0 ~( _$ {  finally# D( E& B% W( \; C
        sys.Free;1 O# ^, J2 q# s; V9 I
      end;: H& v4 K5 O% v
    end;</P>5 m( t2 v$ j3 _% D* u2 Y! k
    <>上面是操作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-25 13:38 , Processed in 3.695531 second(s), 50 queries .

    回顶部