我用的数据库是oracle,通过query 查询后的数据在dbgrid中显示出来后,要求在最左边加一序号列。
解决方案 »
- 请问delphi怎么多人一起开发?
- 难题!! 如何对声音 进行 频普 分析 ??? 例如分析声音中有没有钟声音存在 , MMTools 控件能不能做到 ??
- exe里运行正常,BPL里不正常。2者区别在哪里?
- 窗体移动问题-在线急等???
- 版主请进
- 我在51job上看了,Java招聘大概维持在delphi的10倍左右, c系列大概维持在delphi的5倍左右!
- 讨论:关于WinXP下开发的COM+的分发问题!!
- 求助:关于stringgrid的问题
- 为什么我定义的Class的Private变量也可以被外部修改,在.后面也会列出来?
- delphi中有editpopbox这个控件吗?有的话请说一下用法。
- 安装控件后,大家一定会碰到的问题!
- 每天都很晕
比较笨的办法
http://community.csdn.net/Expert/topic/5361/5361826.xml?temp=.9655573
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DataSource1.DataSet.RecNo > 0 then
begin
if WideUpperCase(Column.Title.Caption) = '序号' then
DBGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top, IntToStr(DataSource1.DataSet.RecNo));
end;
end;--------------------------------方案二:原作者:hongxing_dl这是用Table做的演示,你看懂后,自己改成Queryunit Unit1; interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids, StdCtrls, Buttons, Db, DBTables, ExtCtrls, jpeg; const ROWCNT=20; type
tmygrid=class(tdbgrid)
protected
procedure Paint;override;
procedure DrawCell(ACol:Integer;ARow:Integer;ARect:TRect;AState:TGridDrawState);override;
public
constructor create(AOwner:TComponent);override;
destructor destroy;override;
end; TForm1 = class(TForm)
BitBtn1: TBitBtn;
DataSource1: TDataSource;
Table1: TTable;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1;
mygrid:tmygrid; implementation {$R *.DFM} {tmygrid}
constructor tmygrid.create(AOwner:TComponent);
begin
inherited create(Owner);
RowCount:=ROWCNT;
end; destructor tmygrid.destroy;
begin
inherited;
end; procedure tmygrid.Paint;
begin
RowCount:=ROWCNT;
if dgIndicator in options then
ColWidths[0]:=30;
inherited;
end; procedure tmygrid.DrawCell(ACol:Integer;ARow:Integer;ARect:TRect;AState:TGridDrawState);
begin
inherited;
if (ARow>=1) and (ACol=0) then
Canvas.TextRect(ARect,ARect.Left,ARect.Top,IntToSTr(ARow));
end; procedure TForm1.BitBtn1Click(Sender: TObject);
begin
mygrid:=tmygrid.create(Self);
mygrid.parent:=self;
mygrid.left:=0;
mygrid.top:=0;
mygrid.Height:=300;
mygrid.DataSource:=DataSource1;
end; end. ----------------------------------------方案三:用SQL查询语句实现。数据库为ACCESS,有主键字段“ID”,数据源为Query试验通过。:
sql.Add('Select (Select count(*) from 表名 where id <= a.id and (id >= 100)) , * from 表名 a where (id >= 100) order by id');
oracle数据库,我没有条件测试。
procedure TForm1.Button1Click(Sender: TObject);
var
I : integer;
begin
Query1.Close;
Query1.SQL.Text := 'select * from animals';//换成你自己的查询语句
Query1.Open;
for I := 0 to Query1.FieldCount-1 do
DBGrid1.Columns.Add;
DBGrid1.Columns[0].Title.caption := '序号';
for I := 1 to Query1.FieldCount-1 do
DBGrid1.Columns[I].Field := Query1.Fields[I-1]; DBGrid1.DataSource := DataSource1;
end;procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DataSource1.DataSet.RecNo > 0 then
begin
if WideUpperCase(Column.Title.Caption) = '序号' then
DBGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top, IntToStr(DataSource1.DataSet.RecNo));
end;
end;
DBGrid1.Columns.Add;
DBGrid1.Columns[0].Title.caption := '序号';
for I := 1 to Query1.FieldCount do
DBGrid1.Columns[I].Field := Query1.Fields[I-1];......
-------------------
你的DBGrid1DrawColumnCell事件,你让它起作用了吗???------点击对象管理器,双击DrawColumnCell一下!
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DataSource7.DataSet.RecNo > 0 then
begin
if WideUpperCase(Column.Title.Caption) = '序号' then
DBGrid7.Canvas.TextOut(Rect.Left+2, Rect.Top, IntToStr(datasource7.DataSet.RecNo));
end;end;
我是这么做的啊
也就是说: DBGrid1.OnDrawColumnCell := DBGrid1DrawColumnCell;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables, Grids, DBGrids;type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
Button1: TButton;
DataSource1: TDataSource;
Query1: TQuery;
procedure Button1Click(Sender: TObject);
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
I : integer;
begin
Query1.Close;
Query1.SQL.Text := 'select * from animals';//换成你自己的查询语句
Query1.Open;
for I := 0 to Query1.FieldCount do
DBGrid1.Columns.Add;
DBGrid1.Columns[0].Title.caption := '序号';
for I := 1 to Query1.FieldCount do
DBGrid1.Columns[I].Field := Query1.Fields[I-1]; DBGrid1.DataSource := DataSource1;
end;procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DataSource1.DataSet.RecNo > 0 then
begin
if WideUpperCase(Column.Title.Caption) = '序号' then
DBGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top, IntToStr(DataSource1.DataSet.RecNo));
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
DBGrid1.OnDrawColumnCell := DBGrid1DrawColumnCell;
Query1.DatabaseName := 'DBDEMOS';
DataSource1.DataSet := Query1;
end;end.我这是用Delphi自带的DBDEMOS数据源试验的,Query与什么数据库基本无关。
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'這樣的提示