使用计算字段赋值,RecordCount这样就是记录很多的时候会很慢.

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, DBTables, Grids, DBGrids;type
      TForm1 = class(TForm)
        DBGrid1: TDBGrid;
        Table1: TTable;
        DataSource1: TDataSource;
        procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
          DataCol: Integer; Column: TColumn; State: TGridDrawState);
        procedure DataSource1DataChange(Sender: TObject; Field: TField);
      private
        { Private declarations }
        FBook: string;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}uses
      Registry;procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var
      vRect: TRect;
      I, J, R: Integer;
    begin
      if FBook <> TDBGrid(Sender).DataSource.DataSet.Book then Exit;
      J := TDBGrid(Sender).DataSource.DataSet.RecNo;
      if J < 0 then Exit;
      R := TDrawGrid(Sender).Row;
      vRect := TDrawGrid(Sender).CellRect(0, R);
      TDrawGrid(Sender).Canvas.Brush.Color := clBlue;
      TDrawGrid(Sender).Canvas.Font.Color := clWhite;
      TDrawGrid(Sender).Canvas.TextOut(vRect.Left + 1, vRect.Top + 1, Format('%.2d', [J]));
      for I := R - 1 downto 1 do begin
        Dec(J);
        vRect := TDrawGrid(Sender).CellRect(0, I);
        TDrawGrid(Sender).Canvas.Brush.Color := TDrawGrid(Sender).FixedColor;
        TDrawGrid(Sender).Canvas.TextOut(vRect.Left, vRect.Top + 1, Format('%.2d', [J]));
      end;
      J := TDBGrid(Sender).DataSource.DataSet.RecNo;
      for I := R + 1 to TDrawGrid(Sender).RowCount - 1 do begin
        Inc(J);
        vRect := TDrawGrid(Sender).CellRect(0, I);
        TDrawGrid(Sender).Canvas.Brush.Color := TDrawGrid(Sender).FixedColor;
        TDrawGrid(Sender).Canvas.TextOut(vRect.Left, vRect.Top + 1, Format('%.2d', [J]));
      end;
    end;procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
    begin
      FBook := TDataSource(Sender).DataSet.Book;
      Caption := IntToStr(TDataSource(Sender).DataSet.RecNo);
    end;end.
      

  2.   

    这并不是一个很好的方法
    如果行数太大,处理会很慢,显示也不全
    建议你用其他控件把行数放在DBGrid的左边显示