QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3055|回复: 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
    6 D: S0 m" \- I+ V6 S  W1: array[1..8] of Integer;/ I) Z% w/ R( g* H
      W2: array[1..8] of Integer;</P>, x3 ^" ?: h! q
    <>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);
    - d9 E) w7 M) ?4 E, U. Q' Y' F( wvar" O' {" ?: {, h" C2 @- C. L  h1 P: j
      colwidth,Max:Integer;- R- c% _9 C9 j! @. V" {- e
    begin* \! T' l2 |7 @- |% Y# K# @- T
      colwidth:=5;
    5 z  j5 q: L* l2 _8 S/ w0 E  Max:=5;
    + F9 i/ j3 {9 r/ e8 r( J, j$ G  if not(Column.Field is TBlobField ) then, z0 W1 g( h, g$ f% U) r
        Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName
    & {  w. \. R; T9 k. H  else5 W5 X; h& Z4 J- B
      begin
    ' N( C! I9 @, C$ F- ]+ |% u) t, {    Column.width := max+50;- _+ M: X; Z' [# {1 ]) m$ m3 @
        exit;6 p2 e3 Q0 _) P, `' L. H
      end;
      V( W# I& ?' W7 \* l7 |  with Tadotable(Column.Field.DataSet) do
    0 b: {, b- S! q* o  begin2 r8 Q% U8 E% \- w6 v6 B- }$ j: [
         case number of
    " d6 f1 C, g) B% V     1: begin
    1 O* V/ p; c  [, \9 N( t5 z          case Column.ID of3 v+ [& A. a  }& k
              3: begin
    , x. @$ [3 X$ c* I. \3 r              if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then- Z" k& o+ a/ Y3 X# C
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ; f4 I% `* I% B5 k              else
    # P9 _  M1 t1 T" }' C1 K4 A, L( I7 @                 Column.width :=w1[3]*8+5;! d8 D3 k# G8 }: T& m
                 end;5 z5 I& ?, c+ \) |
              4: begin
    / f" C! j  U" n5 d; Z5 p              if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    + H7 j* z1 r* U                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    6 ^8 }+ U/ Y9 D  o- T) J- q              else
    0 s+ b) O& t! |$ x: i3 }# e! p                 Column.width :=w1[4]*8+5;, q  d  e4 V' ?) p: G
                 end;
    2 m: h: G) k3 Y3 a          7: begin
    $ w! V, w9 B8 Y2 D, n2 v9 x' Y              if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    9 {8 C1 @) a! G                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    0 Z. T* n: l. U, e              else" h. w2 }; V  a0 j/ w8 x
                     Column.width :=w1[7]*8+5;0 W$ b# Y0 z5 P2 b+ U5 f
                 end;5 s1 s5 k5 ]4 J
              else
    ' C2 Z2 o$ k1 l8 g             begin: U/ i. n  g* C6 a
                   first;
    1 M  j/ h2 H  b  _3 L               while not eof do- t* Y/ q$ t! F
                   begin
    ( e! V( g3 B4 ~+ H: `                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);4 l4 u) e$ i8 H. a5 {
                      Max:=math.Max(colwidth,Max);
    / E& U/ b7 a* M5 |# u- O                  Next;) q0 L3 `8 ]* Z6 |
                   end;
    / F( L$ V8 ]0 Y3 ?- R7 C               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then: h- a& [( L" z
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5: A/ o/ }+ D( q2 k' w8 E
                   else
    $ X: s# }3 w% F; K# x# _0 T                  Column.width := Max+5;
    ' \$ Z2 X0 Y! D( Z( T             end;
    / m) |5 |4 s2 D5 T          end;
    ) i8 S5 d/ ^6 O2 S  T" D        end;
    - O' E' _7 ^5 Z$ a5 j2 T' g* A     2: begin0 `1 c( y* X; Z9 H' Y6 v
              case Column.ID of
    ; b; ~% L( w" q! `+ v          4: begin- w. s0 ], i) }  a) N+ V  ~
                  if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then; _" W7 S0 K4 b4 h
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+59 _8 i  M3 s! N) j
                  else! V+ E' V7 @7 A1 A9 p- J5 m9 z6 v
                     Column.width :=w2[4]*8+5;
    : U: w3 u3 O6 T# M$ S- B             end;
    . k" Z  C! k* M4 s) ?2 o          5: begin
    - ^8 S/ H7 n2 m5 ~4 C" L              if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    2 D2 x7 H8 u+ _: u                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ) z/ q1 q/ l; e* F8 I7 Y4 C              else
    3 {" |0 L+ y. E' R* H                 Column.width :=w2[5]*8+5;
    & c/ T- ]) b$ x! s9 r4 g             end;/ E9 Q% e/ ~! N  h
              6: begin
    - R1 P; Y9 u* Q" ~              if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    * F. Q8 ^- W5 W) {                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5( y( Y3 F/ M$ S# a$ R; t/ C
                  else
    2 o; ?* t* ]5 a                 Column.width :=w2[6]*8+5;  C% ~+ C4 P0 `: M2 e" E# Q% V$ d3 ?
                 end;3 Z. f6 ]' ^% N- k4 a4 m4 S& Q! _  e
              else
    2 `3 @4 T( c; S% b5 S) K& b             begin* a; W. s# Y) [9 g5 g0 s3 f
                   first;
    3 L& v) }3 p2 P& s& B               while not eof do
    7 \5 R0 L) B& i6 l/ Q$ v               begin0 n8 e" l1 [9 x' _4 a5 F
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);5 v( j9 z9 e+ u0 U6 Y4 w
                      Max:=math.Max(colwidth,Max);
    5 j. _7 x  \% p' K& y                  Next;
    ; Y6 F- s* e" p1 ~6 u               end;
    " ?1 V  c- ?& d  C% Q. A               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    " b( u9 {, J2 X( r5 O( C- ^: i                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+50 \; B, S# F. b! {4 g: A% a' A
                   else6 X4 i3 A. ?3 K' J1 a% R
                      Column.width := Max+5;
    " c( h& C7 P: J4 ?* x/ s6 e$ E8 ?             end;% ~. d) d7 _" |9 R+ L' T
              end;; k, m4 [& N* m% j6 \, F+ R. ]
            end;' V" f6 b) \* M/ ~
         end;" Q2 l2 x# `6 Z9 W1 `8 q' r
      end;" L) t) x/ C/ m# ]) r, Q9 D) ~" a
    end;</P>5 V( i3 V0 N: F7 F/ x. q$ j) ~
    <>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);
    7 C! l! R/ Y0 H/ z! c! ^begin
    3 f1 b' [8 S/ y4 F8 P+ U. Y  Orderby(suiDBGrid2,Column,2);
    $ x6 \! K: D+ uend;</P>5 a* a: x6 u% ^* M# `" j, ?
    <>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;
    7 n4 w9 K. y0 |, I% K3 i6 t7 c  const Rect: TRect; DataCol: Integer; Column: TColumn;
    & G1 @) B* Y1 w9 S  State: TGridDrawState);
    * U+ S+ B& L. O. P7 q5 Vvar
    2 f7 `+ \) g4 c! S4 O' y   DrawString : String;0 j# |& j) N8 U; A1 t- ^* O
       sys:TSysOper;
    5 B$ m+ |' ~& _8 Mbegin
    / B# s- {- L# o( B5 k   if (gdSelected in State)then" Y# H( o, l/ S- x+ f( e2 ^
       begin
      c- ]. Q+ ?% I  \     suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色; l( o, h" v' Z
       end
    ' V. Q5 S- X' I0 {   else
    ( A9 A9 ~" o( I. M- X+ X     suiDBGrid1.Canvas.Brush.Color:=clWindow;$ O6 E( x% H0 L" @0 h: q
       sys:=TSysOper.Create;
    / c/ y8 g2 @# U5 _0 p0 ~( e   try
    % a& g1 L' r8 G. {+ o7 ]     if Column.Field.IsNull=false then
    2 k% J. q& u+ ^! O* a- }! B     begin( h2 z$ l: m! p* E/ P/ E4 r, w
           case DataCol of& |& k/ B6 k3 A
           3: begin
    4 Q; A1 n1 J$ n6 }            DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。
    3 k- H' E3 i5 A3 g$ P9 N            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
      E4 {5 s. P) F# M            w1[3]:=math.max(Length(DrawString),w1[3]);8 G$ D5 k/ G5 ]1 R& }5 g
              end;
      F' U" ~8 G! L. u) K       4: begin' ^" l  q' Y7 B$ J- Z
                DrawString:=sys.getLoginMode(Column.Field.CurValue);
    " {! V6 k4 s0 M  I            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);6 V) s4 r. l$ V/ \& W0 ?
                w1[4]:=math.max(Length(DrawString),w1[4]);0 j, @1 ~6 I7 c3 M& N, O6 m4 e7 y
              end;
    / W- Z3 W* Y# i' ?! C       7:begin$ e4 g9 x7 a: }- \! l& A& z
                DrawString:=TimeFormat(Column.Field.CurValue);* s$ p& |: `) R9 x4 [3 n
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    " ~. d( R% d% u0 z* n            w1[7]:=math.max(Length(DrawString),w1[7]);! s% s- p2 e+ T/ m
              end;+ z! a- ~) h  b" ]
           else
    9 Q5 @  J/ I5 V3 e2 O          suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);, ]! j9 v0 K4 O- g; }9 y5 B
           end;
    : n% L3 ^. u; X; e% j( s7 o3 e    end
      C; l- q( }: [8 j$ W/ |    else
    , U5 d& K/ Q8 ?! i5 J% n" G$ S       suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    ! k' y) |) Z. ?% x+ a  finally
    * a9 L) I  }4 m+ u& Z7 g    sys.Free;/ ]0 \. v1 K8 q
      end;
    " B3 ]# C8 E" N7 `' Dend;</P>
    " X7 P( G0 M/ J  c% G# H<>上面是操作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 07:23 , Processed in 0.605725 second(s), 50 queries .

    回顶部