QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3118|回复: 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
    ; _" G+ x, G# P8 Y2 u! f  W1: array[1..8] of Integer;
    " A4 T+ p8 m  I3 K! Y* N6 `  W2: array[1..8] of Integer;</P>; @" F8 R4 Y& }3 R7 {2 e
    <>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);
    & f0 S' I4 o- r& h; I' Avar6 F" V& Y+ a; M6 H6 X: Y
      colwidth,Max:Integer;
    5 k% Q% y9 X1 F7 B4 R, p: Abegin
    7 `' C5 H) z/ F8 e  colwidth:=5;" _0 ?  W" |, {6 Q( ^
      Max:=5;# W0 l8 X, m0 |- ?
      if not(Column.Field is TBlobField ) then% n% H  ?* h4 B$ A7 A
        Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName8 |8 s0 o: y/ W. O. k& `4 t
      else/ N+ @& U6 ?' M/ z2 o+ W% R4 t& I
      begin* L8 H( }2 o. G. F
        Column.width := max+50;
    7 R+ J9 v0 e$ Q. d    exit;
    ; ]8 R7 o4 X; i* J4 t& g, @+ l  end;- Q, W6 W; |! X1 w  ^1 m
      with Tadotable(Column.Field.DataSet) do% Y% v! z. s3 ~
      begin
    + F7 @. w6 d" q. \+ r8 W4 }     case number of; O( p9 P3 A' \9 l. s! k' N  U# Z3 o
         1: begin
    1 }) G9 a" W7 b          case Column.ID of) H# i' F) a3 `3 i. s
              3: begin! ~2 V8 h/ P1 ]4 M( D
                  if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then8 \7 M4 m; m3 H' M) k+ d/ B; D
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5" }4 m) y5 `. g8 f6 i3 j
                  else8 n. y+ Y" V) T+ U! B
                     Column.width :=w1[3]*8+5;/ d! ]0 l& S( P6 K, R) F/ Z
                 end;
    3 ~( U6 q  G# B5 Q2 j5 G          4: begin% ^. I2 S  c4 R4 T& y3 A
                  if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then/ ?2 ^/ t4 ^$ D: I$ F& ]
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5! M+ ~  i' A& \4 x% B
                  else1 O2 C! u) o5 W
                     Column.width :=w1[4]*8+5;
    . b, J( |0 z- I% Y, g             end;
    9 b+ }7 E, D* e# _2 m# g& ?5 c          7: begin
    ( |# B3 f$ v8 \7 p0 C  g5 Q* l              if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    " G% C0 V! s: B0 F- d                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    * a/ r0 c  @+ Q) a5 a& K              else: v4 `7 `$ x9 K
                     Column.width :=w1[7]*8+5;
      l- r: q" M# H2 l3 p6 E& r) _             end;
    ( g7 P5 E/ A/ Q% `( _7 _& N5 `# B0 @- w          else+ s3 h1 R% ?) ]
                 begin
    * q3 f5 t# z: b               first;
    / g1 h; J5 B+ o* ^  `6 ]               while not eof do" J1 e' p/ W; o+ l" s' `+ `
                   begin' h6 [+ S* N; |9 J) G% ]
                      colwidth := grid.Canvas.TextWidth(Column.Field.AsString);0 F  I! l. y8 h' T( t
                      Max:=math.Max(colwidth,Max);
    , e: E. c  b- r% f2 p9 z; {8 Z7 a                  Next;
    / b) N) T: ]; I9 I7 }& l               end;4 P$ Q% }5 B  Q7 s# U, P3 g
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then" @# m8 J, d- j0 I& g3 c/ [2 x
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5: \4 U2 ^7 T9 i1 M8 _, g
                   else
    # P9 J/ e8 }0 F0 f" }9 j" q2 h                  Column.width := Max+5;
    8 H* a$ ?1 y- E& K$ }+ H- T8 H             end;# V- G1 Q& ]! \7 s0 Z' t
              end;
    9 ?2 Y1 m1 T1 Q2 n5 V8 z: [' E        end;
      S, g/ U; ~8 t+ X6 O     2: begin8 h( _5 q% _5 g5 X' b) S2 d' }/ _* q
              case Column.ID of
    ' u5 m1 F3 [; C# B& Q6 Z          4: begin2 B, h4 K+ X, q+ ^0 e# i& ]
                  if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    8 B; n: g7 Y0 j                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+50 R; w. S0 d5 C9 L
                  else
    - F2 |+ m5 x1 N+ C* T: w                 Column.width :=w2[4]*8+5;
      e2 c, j+ P9 h5 q  U             end;
      F# h* A% F" u9 }+ _! j          5: begin
    ' N8 d) x% X5 b3 e; u              if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then% Z  D: n1 r4 }
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5- M" g8 c, R( @4 T% v
                  else; |  ?5 e- m+ l. `
                     Column.width :=w2[5]*8+5;% z% f2 k5 X/ D
                 end;
    5 g3 J0 C0 Y, [3 V8 ^          6: begin
    $ ]" p9 ?' b) C7 \              if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    8 {( c- t$ c0 H: J: k4 _                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5% `5 Q; C6 V+ y2 `4 @; R
                  else
    8 z" q% O, L7 s. I                 Column.width :=w2[6]*8+5;$ U# y( c8 t, k$ ^  \" G0 u2 s) ~6 D  O
                 end;
    / S. L2 Y' z; o          else! o  o% c$ Z$ k2 R! `% T
                 begin: r4 f9 F5 d( H" C% h* f' u
                   first;
    8 [: T5 H6 ?! ]' k. S               while not eof do
    , T/ |+ f5 U9 O) u               begin
    ) o+ j+ ^# i+ e, Y" u' Q+ C$ }                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);( |, R$ ~- l  i; z
                      Max:=math.Max(colwidth,Max);
    ' o/ D8 ]; O& _3 H1 \1 f                  Next;4 {9 E7 b& g$ L$ J; r' u% R2 `
                   end;
    / `" d1 k+ E% C9 L0 X7 n               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
    : E, H2 D" q1 k! y! g9 C                  Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+56 R6 b, V0 o3 k: [& ^4 R, b
                   else
    & \$ Q  c" o' z8 @8 i                  Column.width := Max+5;5 N! m+ X1 ?% l8 Z9 s- f+ n6 D' ^, _, }
                 end;$ I5 N5 ~( M) W
              end;
    6 m4 o1 W) e0 D9 _9 ?        end;
    ! u5 e* v  F# S4 J0 t     end;
    ; v. P# p1 U( c4 D2 s0 e2 M5 Y* M  end;; T% \  A4 J) ]" i
    end;</P>: y0 `( y( D& g9 H& G
    <>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);
    ( F9 `, K, c5 {/ U- y+ G0 Nbegin4 p4 O) B1 H# ]1 T; V0 K) P' ~
      Orderby(suiDBGrid2,Column,2);
    : a, y" r! c% t) u! j) ?- m$ U$ tend;</P>
    0 O% w( q1 E8 L2 F/ {<>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;
    7 l: z  Z# ?) Q+ ?  const Rect: TRect; DataCol: Integer; Column: TColumn;
    & L  a4 L$ Z9 n( s  State: TGridDrawState);
    0 d- ?! U! C1 h2 Rvar
    8 W& g3 a$ m3 h7 i7 a* I6 Z, z' j   DrawString : String;+ n( I- d: Z2 R& R# }" \
       sys:TSysOper;/ t" Q) v0 M( ~# F/ U9 I8 z
    begin
    - T7 O! ?5 E. {' F! E& U4 a0 j   if (gdSelected in State)then
    / d9 G4 v# _0 j) N4 p   begin4 ]$ }2 @$ t( ?! w# {
         suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色
    0 b! S; _. b0 I* T  o7 j) u, x  t   end
    - I8 P# `2 g6 }, {5 S$ G& B: s- P   else
    1 Z* q4 B/ D4 w: e, N5 I) H3 r     suiDBGrid1.Canvas.Brush.Color:=clWindow;
    , L; }, f- U; |  [* n   sys:=TSysOper.Create;' ~1 ^8 k0 r7 L' p$ F4 j
       try
    3 x0 y4 N& P6 L  Y  w) G: u     if Column.Field.IsNull=false then( p  b% [. C( t: e  s' n
         begin
    6 M7 e* l& s" k- C9 i' ?/ R( Y  P       case DataCol of/ j; W" }  o1 f) `8 I1 d6 t
           3: begin
    ; E' x5 ~+ X( P' W            DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。
    " i/ L) @. E1 B% B            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);! a5 [7 w$ b( Q5 d& s, j( p6 P
                w1[3]:=math.max(Length(DrawString),w1[3]);
    ! X: A5 c4 c4 w0 V          end;
    $ o! b/ N- L7 c# l0 X: x       4: begin, e4 r5 X, d  G$ C& Z
                DrawString:=sys.getLoginMode(Column.Field.CurValue);
    ! }1 ?7 m5 l, X6 T& ]- H            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);" x0 z1 O* H  b2 m3 y; g  a
                w1[4]:=math.max(Length(DrawString),w1[4]);
    . b5 r! F: S1 f8 i+ t7 O          end;
    ; n5 t$ l& o; M& ?) ~) R7 B       7:begin
    7 \* J# X4 W& P, _            DrawString:=TimeFormat(Column.Field.CurValue);1 |, @1 n+ A+ I' Z8 o# B4 E
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);% x* d5 a4 v. l& e- ]
                w1[7]:=math.max(Length(DrawString),w1[7]);- ]8 Y2 ]( V4 c& s/ j
              end;
    9 Z2 D# ^8 g  U       else
    - p5 ?' |9 q) f) x  O          suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    " e7 L+ H7 l( [6 l- c( d       end;1 F  j* {$ Q7 r8 d( T
        end
      O( h; W, t( @# E0 z  ?    else$ b) y  r0 a. e) I  H
           suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    5 H6 l  L/ U+ h6 h: g4 A4 I  finally
    ! W7 w$ }% s0 M% p3 k    sys.Free;
    , k) ]* @! ?. A; P3 s5 o  end;% N- ?% m9 {" d8 R0 }6 S) o
    end;</P>
    # ]' S( b" j1 ~9 P<>上面是操作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-24 18:11 , Processed in 1.356035 second(s), 50 queries .

    回顶部