procedure Tform1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if Column.Index = 0 then with DBGrid1.Canvas do begin FillRect(Rect); TextOut(Rect.Left+2, Rect.Top+2, IntToStr(DBGrid1.DataSource.DataSet.RecNo)); end; end;
谁能给我一个肯定的回答,谢谢!
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if Column.Index = 0 then
with DBGrid1.Canvas do
begin
FillRect(Rect);
TextOut(Rect.Left+2, Rect.Top+2, IntToStr(DBGrid1.DataSource.DataSet.RecNo));
end;
end;
另:由于我是修改一个老系统,所以我不可能将数据引擎从bde改为ado。
给你个参考
http://www.51delphi.com/delphi/showtl?ID=46664
int i=0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------void __fastcall TForm1::Query1CalcFields(TDataSet *DataSet)
{
//计算字段的事件
i++;
DataSet->FieldByName("calc")->AsInteger = i;
}BCB更熟些,是BCB的代码.不好意思.
再放一个TClientDataSet连接TDataSetProvider,操作TClientDataSet就行了.
1,在sql可以实现但是效率低.
2,用sql结合临时表可以实现,但是不适合修改老系统,因为修改的工作量大.
3,用query的recno实现不了,所以提醒后来者不要浪费时间.
最后,我放弃了不提供此功能.
最后谢谢各位,operfume(橘子香水) 的方法比较新颖,我准备再试试.