QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3061|回复: 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
    ; f0 t0 v' h: l6 b  W1: array[1..8] of Integer;% z% M9 k! o4 R" P% i6 u
      W2: array[1..8] of Integer;</P>
    ) Q5 ?6 U5 t: G' a<>procedure Treckoningform.Orderby(grid: TDBGrid;Column: TColumn;number:Integer);
    / C) B! w: U: b5 k! X' ?7 d/ e$ C# Avar/ w/ {& |% l# m4 j8 z/ @
      colwidth,Max:Integer;
    . ?: a  x" v! K6 `) Ibegin
    / ]4 a# ]  u; F. L$ v* h' E# E  colwidth:=5;
      K+ C  |6 l: T* {  Max:=5;2 D8 E. V% f$ Z' O" Q
      if not(Column.Field is TBlobField ) then9 S+ p* ?, ?+ u0 O( c9 }
        Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName: B: V; D( u$ Z  t: G* y* b9 y
      else6 n$ c/ f" \' }+ w4 Z
      begin
    * W" ~" L: M" Z9 _% I- Q5 f    Column.width := max+50;
    6 Y3 T3 _8 Y3 e5 F; A    exit;- V9 t& \; {8 @. @
      end;! `6 ~' y) r9 u
      with Tadotable(Column.Field.DataSet) do
    * N$ H# x# m2 h  begin
    5 ]) `# L' _& ?: Q7 t2 o     case number of+ r9 `  m# d; V
         1: begin5 h% L: I3 f# D: q! A/ t
              case Column.ID of
    % f% c, i! G: x5 a  A. Z0 ~. u6 Z          3: begin
    ; c0 P/ N$ c6 H' N5 R$ g2 d2 f              if(w1[3]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    % P5 P" S/ `3 ?( h( F                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+55 u/ H9 W% M0 u  j" y
                  else
    ( y, t8 {' v: ^& i8 s* }                 Column.width :=w1[3]*8+5;0 b5 g8 G6 d" t% E& `& w
                 end;8 f6 N! d7 Z' g* S
              4: begin! \% z; _6 _/ u
                  if(w1[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    ' Q( W2 C1 Z4 N6 j1 N( Z) C; A                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5, I; _$ {5 p' y* {0 J8 Q
                  else5 v# `* B- m- v' j& t% B5 \4 ?
                     Column.width :=w1[4]*8+5;
    / H& y3 f* t; @* @2 [! L             end;+ Q- [  D# V0 r+ i! h" B
              7: begin5 e3 d* m0 \% w
                  if(w1[7]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then0 S/ P& d7 J8 t/ o+ `! J
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    % S5 m! k- w5 ~, e" M, Q, A& ]              else
    . H( \2 a( D1 t3 x                 Column.width :=w1[7]*8+5;/ s- x& t" K; a! e
                 end;
    ; P7 u3 m! R9 {- M4 Z3 q5 k% l          else
    1 [- C2 D8 p  \. `. d             begin1 _+ I; s4 [) m5 A( a
                   first;
    ; r8 L& J, M7 S               while not eof do
    8 d6 l5 v3 x- t( M' `! P2 }/ j4 R               begin
    $ j; i8 L+ F1 v5 m1 F; P' d2 G                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);
    , Z' y- s% h7 d% e$ b. y                  Max:=math.Max(colwidth,Max);
    , o3 {# C5 q; ]! P: ~, r$ O                  Next;% A, u! }2 g! G' ^' c1 L! ?* c
                   end;
    , g* c8 X7 G. N3 v  d               if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then, x* j6 t) Q. K9 E0 A! z6 E
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+55 U6 ~2 u) L& p" n9 I' J
                   else" l9 O1 R. N' W5 @1 ]7 V
                      Column.width := Max+5;
    9 w7 U1 b3 }' d5 p# x' Z             end;
    , Z6 l) j) F7 {" @+ E1 C2 P          end;
    6 p3 t8 E- \; q% A+ A% @        end;
    , w5 y  m3 _/ j  B     2: begin
    ) o! d7 U3 S* O. ~3 s, a          case Column.ID of
    : q% M" u+ |3 g2 I1 b' o5 `          4: begin
    7 Q6 Y: N7 v9 H  A              if(w2[4]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then9 H. I& E6 g7 N9 u+ x; ?
                     Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+56 [2 a4 p9 m$ k7 u4 h' Z$ L
                  else
    9 W% h( n; Z% ?: ~5 B6 J                 Column.width :=w2[4]*8+5;
    1 {8 t( a; Q2 u2 `2 j9 t3 y             end;0 T, `$ A2 F* ^1 E' P
              5: begin
    ' J! {( c* l) t# u5 o              if(w2[5]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    ; C% ]6 l7 V/ q( {( N                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5" @4 G( j* P% C3 m
                  else9 N' r, J/ z2 ]  x" |0 X
                     Column.width :=w2[5]*8+5;
    9 s/ B% ]: t* m; G             end;! I/ c( W- _" V0 z. N, v
              6: begin2 Z& \( ~* b7 h- M$ P
                  if(w2[6]*8+5)&lt; grid.Canvas.TextWidth(Column.Title.Caption) then
    ' O+ l' W, u: Q# z7 I- w  |                 Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5
    ; ~& x$ |% A' V9 U+ S) @$ r& d$ B              else2 S0 [. r8 [2 v2 q% a* K4 ?
                     Column.width :=w2[6]*8+5;
    " f1 P# B6 W: n$ T+ \) J- d* c) T             end;- R+ C+ t: e9 F
              else
    9 N+ w' {. E" A$ I             begin
    ) X% O+ w; h8 z" m/ Z               first;1 _# ]% _! Z# Q4 C7 u& w4 K
                   while not eof do9 t: a' E& z1 X2 I' X  x# c
                   begin
      i$ j" f5 y* [" u5 T0 z/ n) ?                  colwidth := grid.Canvas.TextWidth(Column.Field.AsString);6 ~7 s, G# [# ?7 u
                      Max:=math.Max(colwidth,Max);- v2 P  i- w# Z9 u5 p# f4 ~# x: ~% z# N
                      Next;3 g! u7 [# i8 x
                   end;- [0 K$ S5 y' S  V0 ^* N
                   if (Max &lt; grid.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then8 n! z& z- N! y% W
                      Column.width := grid.Canvas.TextWidth(Column.Title.Caption)+5# K0 f& v% a3 w3 ^* z- E: K
                   else
    , K  q& R% a  f                  Column.width := Max+5;. T9 H) J0 }! m1 }+ x
                 end;
    , r8 O8 {& S0 L* i          end;
    , J% G, m/ X) \- p8 e; C        end;
    4 r: J, I' Z4 D5 G6 z$ u! I2 b4 i     end;) j* u8 o" o" d+ ?& Q) l
      end;+ Y' p4 z' K  z" t
    end;</P>
    1 X; e/ n! B# Y+ {+ n+ ]& k<>procedure Treckoningform.suiDBGrid2TitleClick(Column: TColumn);6 F5 `7 b, {5 _7 g1 ^. }7 c
    begin
    9 j3 P. u$ A$ P- p  Orderby(suiDBGrid2,Column,2);
    0 Y8 b1 W( U/ f' N- V/ ~6 O. send;</P>+ J3 k- @0 A6 j$ _6 {
    <>procedure Treckoningform.suiDBGrid1DrawColumnCell(Sender: TObject;
    + X& r$ ?; Z0 C! ]; }  const Rect: TRect; DataCol: Integer; Column: TColumn;
    8 C7 y; J9 C! F+ F1 O  State: TGridDrawState);; S  D* w  {# H/ k9 F
    var5 s. _  S  u0 p' Q' s  J& L
       DrawString : String;, \( a" V- L1 t* z$ w
       sys:TSysOper;
    ) s9 n( h! u# k( d% D( u3 N' wbegin/ L6 q! y8 x4 S9 c, q
       if (gdSelected in State)then6 a. {( H' Y+ G  Y" R) \
       begin& ]& [! {* n2 M
         suiDBGrid1.Canvas.Brush.Color:=clFuchsia;//使被选中的一行的颜色变成紫红色) m+ b+ V; o% N- f  _
       end  m/ O) Q7 v' v' g! F& N
       else
    ( w" A+ c" ?+ `$ i) v/ K     suiDBGrid1.Canvas.Brush.Color:=clWindow;! e; i# A- N3 f$ L4 l4 U
       sys:=TSysOper.Create;
    0 a2 Y4 E% _5 k# O% t: d8 V* w   try+ O  ^7 z  a6 T" g
         if Column.Field.IsNull=false then
    7 T+ Q( u9 P1 j/ h/ D- r, R     begin2 _# o1 n$ g' y3 W
           case DataCol of) D0 Y2 f( H0 L4 b
           3: begin" J, O1 Z) n8 ~4 v* L* H! p
                DrawString:=sys.getSex(Column.Field.CurValue);//得到要显示的字符串。
    / I( t1 r0 w* `5 R' w( ^& O3 D$ `8 i            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);
    ' k: w2 q1 T1 Z2 j) E            w1[3]:=math.max(Length(DrawString),w1[3]);
    4 k( g  H% v/ Z3 i          end;
    8 q" r+ P2 L! X3 @! A- _       4: begin
    4 M+ X1 J" M2 ^+ _  F: Z            DrawString:=sys.getLoginMode(Column.Field.CurValue);
    7 J6 w% x: @# T4 R& z7 |9 j* J            suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);/ c- x0 i% b. N* H9 B' x2 d
                w1[4]:=math.max(Length(DrawString),w1[4]);2 ~1 b; V6 s- `% x+ g% B) {
              end;' N% `3 w: ^! ?1 ~1 g7 u, k$ X0 t8 v
           7:begin1 y# x$ V/ H* A  c$ o* \# J& u
                DrawString:=TimeFormat(Column.Field.CurValue);3 O4 m2 C  E7 y' W+ a
                suiDBGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,DrawString);% u* y; e7 f4 J$ E; u7 V& X
                w1[7]:=math.max(Length(DrawString),w1[7]);
    " T7 x7 e- L) l6 P5 c, i+ V          end;; ?. d3 A) v' l+ B( o4 m9 X
           else* M5 i" M3 g7 e* n( C
              suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    6 Q% h* I4 P* A* U- N& O       end;
    0 d! A' h1 r  ^/ P$ b. C    end
    , X: X3 k. |) c. g9 ?+ J    else
    ' t0 L0 v" u1 W$ ?0 {       suiDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    & }  x& z* d; E# D* h9 `5 i% j  A* R  finally3 ~# N% M& d5 `0 R# f: P' A
        sys.Free;
    ( x5 z  o5 f) {5 G  end;+ V4 a) P& e" z4 d( E5 U
    end;</P>+ o7 K  r- p, T5 X
    <>上面是操作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-13 02:26 , Processed in 0.427199 second(s), 51 queries .

    回顶部