我是这么做的,自己加了一列No,select '' as No ... from tableName 然后在DBGrid的onDrawColumnCell里面加入 if (Sender as TDBGrid).DataSource.DataSet.RecNo > 0 then begin if Uppercase(Column.FieldName) = 'NO' then (Sender as TDBGrid).Canvas.TextOut(Rect.Left + 2, Rect.Top, IntToStr(((Sender as TDBGrid).DataSource.DataSet.RecNo))); end; 感觉这样效果好点.
2、在屏幕上显示
方法有2
1)使用数据方式,在数据集中创建一个序号字段,如果有中间数据行删除,会麻烦些
2)仅画出来,在OnDrawColumnCell事件进行调用Grid.Canvas.TestOut 注:如果使用DBGridEh,这件事件会简单些。
在 ado 下可以通過 adoQuery.recNo 來處理。 增加一個計算字段。
然后在DBGrid的onDrawColumnCell里面加入
if (Sender as TDBGrid).DataSource.DataSet.RecNo > 0 then
begin
if Uppercase(Column.FieldName) = 'NO' then
(Sender as TDBGrid).Canvas.TextOut(Rect.Left + 2, Rect.Top, IntToStr(((Sender as TDBGrid).DataSource.DataSet.RecNo)));
end;
感觉这样效果好点.
const TRect &Rect, int DataCol, TColumnEh *Column,
TGridDrawStateEh State)
{
if(Column->Index==0)
{
TDBGridEh *dbgrd=(TDBGridEh*)Sender;
dbgrd->Canvas->Brush->Color=clBtnFace;
dbgrd->Canvas->FillRect(Rect);
TRect rct(Rect);
Frame3D(dbgrd->Canvas,rct,clWhite,(TColor)RGB(0x80,0x80,0x80),1);
dbgrd->Canvas->Font->Color = clBlue;
dbgrd->Canvas->TextOut(Rect.Left+2,Rect.Top+2,IntToStr(dbgrd->DataSource->DataSet->RecNo));
}
}这样也可以解决