QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3040|回复: 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& j2 W; r' Y# u5 Q
      W1: array[1..8] of Integer;
    " b- u8 X# o4 j  W2: array[1..8] of Integer;</P>5 O/ A* @5 ~  h# R1 L( ?/ f" |- P# N
    <>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);
    + \6 p5 j2 h) V- @var
    8 |' u7 [9 u- r( R8 U* H0 w4 I5 e  colwidth,Max:Integer;
    9 |' S: x7 N$ I' T% Q. r% I% Ebegin# a. U- z: @  E8 {* @
      colwidth:=5;
    7 F# M& Z  C7 V7 q# B0 G  Max:=5;( T* ~; s; @3 B# v: w, D5 ]
      if not(Column.Field is TBlobField ) then
    - w, l6 r4 f' c    Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName( L( L6 C/ q2 ~0 R* u
      else( s8 J+ T5 G7 D
      begin
    5 S5 m0 B/ `1 P$ x! D    Column.width := max+50;
    , M, f# O, O' Y  J9 }& p    exit;
    9 ]# t  V8 M* |. P  u  end;. f9 P2 T4 s0 U* c
      with Tadotable(Column.Field.DataSet) do3 }: _+ L1 G$ q" X% J: {$ m+ {$ g- b
      begin$ {* L6 `+ `# ]" z$ H- p
         case number of3 h9 y! e& S1 t7 F) @4 @; Y1 L
         1: begin
    . ~% u5 V7 s' R1 k) B$ j          case Column.ID of
    , j2 J* V, P( f7 r          3: begin
    ' }+ A* c0 F# j              if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then. ~1 P' V( ]1 ?1 K6 }& H
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5% L- M' h: ]7 T  m
                  else" q, A( K& S8 a4 X% @3 [
                     Column.width :=w1[3]*8+5;, b5 o! A. l. t# R, ]8 j# R
                 end;" `2 B% h- {) b3 y4 q3 L
              4: begin
    / T! R- E. e5 A9 e( R  M% ^# ^% w              if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then" n' m( R0 U; \# }7 s5 ^
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+56 d. Q& i. T+ s; L, u* s9 b, @
                  else$ i8 L+ b  Z8 N/ N- I
                     Column.width :=w1[4]*8+5;
    & B1 t5 [! K9 t, J2 c# P8 s3 W/ O& Y             end;% `2 @" f; H$ I6 o* w( Z+ E7 L' ]
              7: begin: H. Y: y$ ?; Q, S
                  if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then# o% S& X0 E7 C. e& a! s
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5, n) l* f; T  _2 J
                  else
    5 {" O# H. u0 \2 [5 w' D0 M                 Column.width :=w1[7]*8+5;* j; b/ e$ p2 S8 j
                 end;
    : [6 Y; I6 I$ v8 r          else
    + r6 a. o$ B: v0 n$ [             begin) m1 D/ l& P& `
                   first;
    1 Q" |. J% I  ~1 D% u               while not eof do
    # ]- [. X5 v% P& \3 y8 X& e               begin
    7 B  F3 J0 `# T9 a( R% e7 Q                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);2 S- p" ^* `5 E' b! ^/ [  s4 G7 j
                      Max:=math.Max(colwidth,Max);; y; @/ x$ v+ ~. ?% O$ L
                      Next;9 T8 S% }* }8 @  t: o% o2 `/ Y
                   end;2 d; b2 k  L  t0 E( z% {
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    + o: Q0 R, |2 i, o7 E; G                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    3 u0 h/ t0 x  w) W" P) r               else0 U; z" l+ c# b8 `' ]' D5 h
                      Column.width := Max+5;+ o1 C9 G8 T3 U& P( E
                 end;
    , P: a* {- i* A! w5 i5 ~2 D          end;/ i% {4 D! q7 K( F
            end;
    , c& ^  {' `, Y     2: begin6 T6 c/ W$ P1 b7 x/ |; x
              case Column.ID of
    3 I% v- s4 g& a# u5 s& l/ \1 k          4: begin, W2 l/ W6 C, m2 V
                  if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    1 ?9 K& U$ g6 g0 {0 W( Q7 s                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    9 v, \) D4 a0 p: @, a4 Z7 y/ ]              else
    3 N0 h: R! Z  ?( B3 P- _                 Column.width :=w2[4]*8+5;
    4 a- a, \7 z; j             end;3 K5 V: S; b" p7 B+ z0 g& f
              5: begin. R. p5 I  J! F
                  if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then& D& l1 J, L* L& }
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    0 c6 b: K3 @- C$ _              else. ?8 \4 s# Z% c; v
                     Column.width :=w2[5]*8+5;8 @9 P0 J0 {' }  N: _8 k
                 end;: W( ]$ ~/ x4 \
              6: begin4 f% A7 u9 n% R% Y5 c) g: v$ g
                  if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    4 t' Z% v5 W7 e                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5& i! p/ h( _$ \+ E0 E
                  else
    , m/ j5 I3 M" k4 L9 h4 U                 Column.width :=w2[6]*8+5;
      j3 R5 h$ g* {  I7 W( F             end;
      K" h! S" [& w4 _' I+ ]. S          else
    9 r. Y7 M7 c( z' j  w7 j2 U; q, \             begin
    . `( l( q1 `8 _8 M  w* C+ y               first;, e$ Q' v+ D5 u
                   while not eof do7 F& ]: E: Z: v9 l$ K7 `
                   begin" x5 H5 [7 F! a' K
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);" X, ]' c  O3 |# y% @# D
                      Max:=math.Max(colwidth,Max);
    , D! B3 E* ~" P% r3 k' N                  Next;
    / X) Z/ N0 n0 @* q               end;3 S, r/ ?& X+ A, p
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    . M! M( B& F# M5 n. ]; @                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    $ A- C& }. B9 n! ], e! m  O               else5 D& k3 k. L7 @- Z3 _
                      Column.width := Max+5;7 B1 y6 h+ z# I$ |' F+ s
                 end;
    3 ?+ p) ?6 b; r8 y- b8 ?          end;" u0 F4 [4 B3 |# B5 K2 |
            end;& L4 M7 u. p* d5 Z1 W+ X
         end;' f6 e- b$ S3 e& _1 {% g8 Z
      end;- Y- u1 z6 z  N7 O2 M
    end;</P>
    + n( s! Z# x3 X  _5 A( O! \0 ~<>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);) w* R  c. B: m+ t
    begin
    8 Q5 K# ^; X" U; H4 ?  Orderby(suiDBGrid2,Column,2);
    $ W; u) [/ f7 gend;</P>
    * w4 V/ i, P7 M& }- }: H) q<>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;
    + k0 i8 b* Z6 B  const Rect: TRect; DataCol: Integer; Column: TColumn;0 b* L1 m( e8 O* S* C/ s1 j
      State: TGridDrawState);
    ( s/ ]9 f7 E+ T. i, ^' q% n- }var
    3 W2 {. l% D3 Z) ^/ F* Q   DrawString : String;
    , n+ T9 `; q. y8 }! w- R* G   sys:TSysOper;
    3 n5 r/ P) L/ V* sbegin
    , S) X/ b) {) J! x; \) V! {. \, R   if (gdSelected in State)then
    / }; k7 @; I2 U5 n   begin- v" w: D% o  N* E# p
         suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色
    , v1 t) e, \5 E3 P, e9 g4 l- Q& g   end. y/ O3 k' z9 \5 U
       else
    ' Y4 s8 W$ l  T  l2 ^. q     suiDBGrid1.Canvas.Brush.Color:=clWindow;
    9 {. U% i* ^4 C# h$ H2 C0 H   sys:=TSysOper.Create;
    5 Z4 f6 e. j) B% f% a   try
    ' K: |$ F& A5 i7 ?! J0 P/ B2 w4 S     if Column.Field.IsNull=false then! y' f+ }6 @: t4 F8 G, z
         begin' y  z7 u4 k7 e9 d4 t! d
           case DataCol of& d/ f" G, {: p0 B, d1 ?
           3: begin% g6 C9 k- B9 N! C
                DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。; k, @: W5 \# c8 k; M
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    ; n7 O3 ^0 \* }% |            w1[3]:=math.max(Length(DrawString),w1[3]);
    + l& F- F" A* w' Q0 z. T          end;
    7 n3 z1 V9 j1 b8 }, `6 o       4: begin( u$ O# s6 J! ^( Z1 {8 X; N
                DrawString:=sys.getLoginMode(Column.Field.CurValue);
    # u9 s$ j$ Z2 \( H            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);  X! Z0 G. e3 U
                w1[4]:=math.max(Length(DrawString),w1[4]);
    - C$ T$ D6 }. G4 S& e2 q          end;
    7 m  ?1 \8 r( G+ ^/ a# Z       7:begin# G" e7 b9 E+ c- R& a! n
                DrawString:=TimeFormat(Column.Field.CurValue);
    ! f: n$ f8 a( h5 T  z            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    3 ^: B. f+ Q" V4 ?, b- y            w1[7]:=math.max(Length(DrawString),w1[7]);3 a& g( d8 o" ~# z% S4 X) u9 R
              end;
    / g4 ?1 \  |  |) f, X8 h3 N       else( N% g% U6 D: s; [  @- r% z! J% d
              suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);1 D2 n5 c  R7 I# p! }# M, z
           end;' {* B9 f/ O- h  f+ E6 q. H
        end
    ! z  [8 c  Z5 L5 O6 l    else. R8 Q+ |, k/ e* K6 D; `% F
           suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);& O1 j% h: j! Q5 Z! t9 U
      finally  x- s5 g5 T; `6 x# u) y
        sys.Free;
    " i4 }( O, C" Z, @; R  end;
    & C/ v( H; j# n; v; R9 m; u/ B% Eend;</P>- c# h8 F% v7 A3 n
    <>上面是操作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 13:31 , Processed in 0.421790 second(s), 51 queries .

    回顶部