QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3058|回复: 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
    5 E) S$ P7 a' c9 ?( @6 @9 r  W1: array[1..8] of Integer;
    8 Y* o# _, I6 y  j  W2: array[1..8] of Integer;</P>. n! J% R  j4 ^4 }2 A: ^
    <>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);
    6 B& f- [- D  g2 T. w2 T4 cvar) B% Z' }; {4 o$ \3 R  @* R( O3 \
      colwidth,Max:Integer;. G0 a# \! h& ]9 U9 {
    begin' G% k- j% W" D& {
      colwidth:=5;( @( ]. P! l% A! a) p
      Max:=5;
    # P9 _3 f5 i/ \& Q( B( n  P  if not(Column.Field is TBlobField ) then
    0 {* m5 h9 h  T) U7 t& q- ~    Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName( N) Q& E8 q# N2 n' V* [! L& x4 ]
      else. G) X" L7 k1 g' R  N
      begin
    $ L$ _, K; n; C$ S( \    Column.width := max+50;& L- m% R% Y9 F- v1 i
        exit;% [% b/ B) R9 x( Z% a& X# `
      end;
    * d; L% i. \* L/ n  J  with Tadotable(Column.Field.DataSet) do  V, r, R1 f) c1 s# Z* p( t
      begin+ b. L' d* n0 V) z4 U0 @
         case number of: L6 b& ]7 @( m! c
         1: begin3 Y2 B5 B( ~. ~' n
              case Column.ID of
    # i3 Z( z8 b- i% B+ j          3: begin  Q- s$ ~; w# h" V# ~( ~" _
                  if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then* x0 Q9 ^$ {  r- ?6 F2 H* m
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    " Q9 H" g/ q  [7 g! C& Q0 u# q              else5 p1 \3 X- j- K* }6 l. M" c, @& h
                     Column.width :=w1[3]*8+5;6 s/ f' j7 R" r' Z4 O5 Q5 q2 G
                 end;5 s. d/ H' @2 W+ \
              4: begin
    / T; _' h. D. m3 g$ o6 T# I              if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    6 L0 P9 ?+ x9 K( J8 E- A                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    % B7 S7 V' \- t4 S, }              else( s% T% p" Z9 X6 r
                     Column.width :=w1[4]*8+5;
    3 `0 E+ Q4 C  f& _/ |             end;
    ( y# u. @  O  O/ T# Y          7: begin
    # _# n8 }, x. h* Y& s4 w3 B              if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    5 H3 ~9 h# Y2 `% Q! Z                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5, `6 z# u+ ^* Y4 ?3 Q9 w
                  else7 K; \/ E% ~  X! ]
                     Column.width :=w1[7]*8+5;
    ) Y) @" |" z9 H! b. a: N- O9 N( G8 K# @. O             end;  h* d6 c  O( c( l! [9 b5 L
              else
    % G6 n9 z, X6 ?. X) d& |             begin2 D$ [# Y% z4 \1 C5 Z
                   first;8 S* W, U# L4 {+ a
                   while not eof do
    7 `4 q, v$ P5 w/ F. w               begin: }9 n8 |! I& k8 |
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);" C/ Y9 s6 w0 c" {: N
                      Max:=math.Max(colwidth,Max);& T6 B7 r/ F. S: o
                      Next;
    % n" a  W3 u2 |7 K+ G; f               end;  }2 Z+ {" \9 Y) c
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    ) |7 ?0 r3 w5 k- O6 f" y                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ' X4 g5 r! b/ ~4 a. J( l. j9 c7 G               else
    % I) o3 s7 U* v" I6 S                  Column.width := Max+5;7 E' P, o0 k: P! G& {+ i2 ]
                 end;
    1 E, y5 B) D! n: ~( h% j          end;7 ^6 N: x; r8 n% Y; b  x
            end;& V& V& r9 I8 X7 @7 z( t) {
         2: begin
    ( i. z9 Z: f# w. W# c- d          case Column.ID of
    2 s1 i6 F% y5 J6 l/ Q! K          4: begin- e5 Y; F2 A; @: M% y7 V' u
                  if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then4 U, q; a5 C% C  t8 F
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    & k7 ?0 H9 c) c( j- Q  k              else
      |0 `2 ^4 ]7 U7 U% U$ J' f, V, f7 \                 Column.width :=w2[4]*8+5;
    ) Z/ g: N% o5 C3 L4 p0 \; Z7 v             end;
    : @" }3 j/ i  D5 P# H          5: begin
    ' n- [+ z! m  D              if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    & G2 _, J3 v9 |5 ?                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+59 X" ^) J, S$ \6 S8 |1 A8 ^8 Z
                  else
    " Z0 `0 W9 E& ]& u0 R+ a  B                 Column.width :=w2[5]*8+5;
    + p9 y& x* x4 [- O  Y             end;+ |( ?" W8 @9 ]9 k/ P2 i# H
              6: begin# m1 w2 L( Y8 ^. u* `
                  if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then1 u& G" f  J$ X* o$ U& I+ X. X
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+55 v7 ^; K" \( \- B
                  else3 p- o5 [2 }; o
                     Column.width :=w2[6]*8+5;8 s, H) r+ Z/ T9 U7 d% Q
                 end;7 Z- h" O1 h5 L, d' c/ I4 n& |
              else
    , s* K2 t  K( K7 n. G1 d             begin
    . ]- {* K0 L  w* v9 f               first;
    9 ?& @5 @, v4 K4 R# o5 d               while not eof do
    # l4 O& C) [# ^6 u& Z- w# ?' c               begin
    7 R3 Q0 A: z9 f9 b                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);8 C" ~2 R( f. M) X
                      Max:=math.Max(colwidth,Max);- s( ?* \4 w3 w9 L' @
                      Next;
    1 h  p+ c4 C+ L+ V( _+ f               end;
      i: b& l# O  [$ p( r, |" F               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    - E9 ~. S( R; H3 o+ k                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    1 q/ W: R  n* {  e- u               else
    5 E1 X2 {) J9 }& V, H                  Column.width := Max+5;
    3 j. i  \4 p8 n             end;6 x) U: i2 y2 d6 F+ y
              end;9 j% u" Q3 C# Y! M) j
            end;  [; q' _0 G' `# `2 l. p% H
         end;  r! ~( i4 t+ G$ C( C
      end;
    2 Q2 q# g- u% G. U6 F9 Iend;</P>
    / |2 B. d" f3 i. ]- F<>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);
    . c1 x+ e  ~) m* v; u* `5 Lbegin
    ' r/ y* z0 _( z7 s* H1 z  Orderby(suiDBGrid2,Column,2);
    4 X5 ]6 m  A3 ]  h3 L' R/ tend;</P>
    4 h" K! |) q- u+ T# U9 j<>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;: D8 ^3 Q  g& I* I5 v  `5 l
      const Rect: TRect; DataCol: Integer; Column: TColumn;$ @2 ^" ~9 c3 k* ]! L9 m5 K  J
      State: TGridDrawState);
    ! k. W+ T% n6 P3 O1 w7 Bvar
    4 ?/ j, g+ ^+ o1 Q; G2 m- M   DrawString : String;( J7 C# X1 m* m2 a2 ~# p- O
       sys:TSysOper;
      n2 F/ [7 I* w0 j# a- `begin
    0 H7 Q/ Q1 |* Z" f2 `$ \% d   if (gdSelected in State)then
    8 s. H8 K$ x1 }& v2 M- u' k# C% R   begin' J2 u/ C  T$ }/ S6 U9 B
         suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色! e* [! ]# V4 J
       end
    7 c* Z2 y$ m4 k$ |8 d+ ^   else
    / u8 {( {7 Z2 ^9 R     suiDBGrid1.Canvas.Brush.Color:=clWindow;1 w% I1 `  b" c5 a
       sys:=TSysOper.Create;
    9 R& o7 b. q: K   try
    * [# T8 ]4 D8 F& Y+ }     if Column.Field.IsNull=false then; G. z6 }& V* Q0 k
         begin
    8 e1 @" @) }8 r" T+ r$ b       case DataCol of
    * `! I, N5 ~7 n0 Q" v       3: begin3 k) s; m0 m, @+ `8 x
                DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。8 i2 c$ E* {8 {3 W: I+ j
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);% C" q: N  I6 R3 H6 R) j1 m) W' h, J
                w1[3]:=math.max(Length(DrawString),w1[3]);2 ?% A9 [0 a/ c/ |
              end;
    " m2 ]2 X/ \6 w9 D0 Y8 s6 q2 N       4: begin
    5 ^0 C) H, H! H1 r( Q            DrawString:=sys.getLoginMode(Column.Field.CurValue);& l* G, S7 A0 M- ~% z$ p
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);2 x, V! G! v* ~5 X' M6 U5 D
                w1[4]:=math.max(Length(DrawString),w1[4]);
    % z) [9 a; f1 d; W6 U: B          end;! |* K& D; G) ^/ L! `! D1 e# v
           7:begin; D* G3 F8 P. G- r0 q
                DrawString:=TimeFormat(Column.Field.CurValue);1 u: l+ ?$ ~0 l% N; w
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    4 ?, a: T1 K2 }            w1[7]:=math.max(Length(DrawString),w1[7]);
    ( @! e5 n0 N0 V+ P; Y          end;
    ! o$ H& z6 m0 M       else  h; p/ a/ F) m3 l% M
              suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    3 N* g2 X9 J1 W' |0 n       end;% u( Z7 L7 z( w) V
        end
    1 K5 Y# t9 K, V+ u    else, y( Y2 U2 T% B5 f0 G' n+ ~2 T
           suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);& L* X& C) j" \
      finally: E$ v7 u# g( K0 ~* t
        sys.Free;: l' e' |# V+ w) `9 A
      end;' \: I9 a" k3 }9 y, _
    end;</P>  ?) W' v1 T/ Q, r
    <>上面是操作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-12 16:07 , Processed in 0.415767 second(s), 51 queries .

    回顶部