爲cxGrid添加行號

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxStyles, dxSkinsCore, dxSkinsDefaultPainters,
  dxSkinscxPCPainter, cxCustomData, cxGraphics, cxFilter, cxData,
  cxDataStorage, cxEdit, DB, cxDBData, cxGridCustomTableView,
  cxGridTableView, cxGridDBTableView, cxGridLevel, cxClasses, cxControls,
  cxGridCustomView, cxGrid, ADODB;

type
  TForm1 = class(TForm)
    ADOTable1: TADOTable;
    ADOConnection1: TADOConnection;
    cxGrid1DBTableView1: TcxGridDBTableView;
    cxGrid1Level1: TcxGridLevel;
    cxGrid1: TcxGrid;
    DataSource1: TDataSource;
    cxGrid1DBTableView1ProductID: TcxGridDBColumn;
    cxGrid1DBTableView1ProductName: TcxGridDBColumn;
    cxGrid1DBTableView1SupplierID: TcxGridDBColumn;
    cxGrid1DBTableView1CategoryID: TcxGridDBColumn;
    cxGrid1DBTableView1QuantityPerUnit: TcxGridDBColumn;
    cxGrid1DBTableView1UnitPrice: TcxGridDBColumn;
    cxGrid1DBTableView1UnitsInStock: TcxGridDBColumn;
    cxGrid1DBTableView1UnitsOnOrder: TcxGridDBColumn;
    cxGrid1DBTableView1ReorderLevel: TcxGridDBColumn;
    cxGrid1DBTableView1Discontinued: TcxGridDBColumn;
    cxGrid1DBTableView1CategoryName: TcxGridDBColumn;
    procedure cxGrid1DBTableView1CustomDrawIndicatorCell(
      Sender: TcxGridTableView; ACanvas: TcxCanvas;
      AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
procedure SetRowNumber(var ASender: TcxGridTableView; AViewInfo:
  TcxCustomGridIndicatorItemViewInfo;
  var ACanvas: TcxCanvas; var ADone: boolean);

var
  Form1: TForm1;



implementation

{$R *.dfm}

uses cxLookAndFeelPainters;

procedure SetRowNumber(var ASender: TcxGridTableView; AViewInfo:
  TcxCustomGridIndicatorItemViewInfo;
  var ACanvas: TcxCanvas; var ADone: boolean);
var
  AIndicatorViewInfo: TcxGridIndicatorRowItemViewInfo;
  ATextRect: TRect;
  AFont: TFont;
  AFontTextColor, AColor: TColor;
begin
  AFont := ACanvas.Font;
  AColor := clBtnFace;
  AFontTextColor := clWindowText;
  if (AViewInfo is TcxGridIndicatorHeaderItemViewInfo) then
  begin
    ATextRect := AViewInfo.Bounds;
    InflateRect(ATextRect, -1, -1);

    ASender.LookAndFeelPainter.DrawHeader(ACanvas, AViewInfo.Bounds,
      ATextRect, [], cxBordersAll, cxbsNormal, taCenter, vaCenter,
      False, False, 'NO', AFont, AFontTextColor, AColor);
    ADone := True;
  end;
  if not (AViewInfo is TcxGridIndicatorRowItemViewInfo) then
    Exit;
  ATextRect := AViewInfo.ContentBounds;
  AIndicatorViewInfo := AViewInfo as TcxGridIndicatorRowItemViewInfo;
  InflateRect(ATextRect, -1, -1);

  if AIndicatorViewInfo.GridRecord.Selected then
    AFont.Style := ACanvas.Font.Style + [fsBold]
  else
    AFont.Style := ACanvas.Font.Style - [fsBold];

  ASender.LookAndFeelPainter.DrawHeader(ACanvas, AViewInfo.ContentBounds,
    ATextRect, [], [bBottom, bLeft, bRight], cxbsNormal, taCenter, vaCenter,
    False, False, IntToStr(AIndicatorViewInfo.GridRecord.Index + 1),
    AFont, AFontTextColor, AColor);
  ADone := True;
//  ASender.LookAndFeelPainter.DrawIndicatorImage(ACanvas, ATextRect,
//    AIndicatorViewInfo.IndicatorKind);
end;

procedure TForm1.cxGrid1DBTableView1CustomDrawIndicatorCell(
  Sender: TcxGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean);
begin
  SetRowNumber(Sender, AviewInfo, ACanvas, ADone);
end;

end.

 

把cxGridView裏OptionsView選項中的兩項修改成如下

      OptionsView.Indicator = True
      OptionsView.IndicatorWidth = 32//寬度

 

其實這個方法就是cxGrid範例中提供的,原範例在CellLevelMultiselectDemo目錄下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章