使用SQL的Select语句返回一个结果集时,可不可以给记录加入从"1"开始的序号。
如SELECT Name FROM animals.dbf,显示出来为
No.      Name
1        Angel Fish
2        Boa
3        Critters
4        House Cat
5        Ocelot
6        Parrot
7        Tetras换一种想法,可不可以设计一个改进的TGrid控件,可以显示一列序号?这个序号列只起到显示序号的作用,有没有这样的控件?

解决方案 »

  1.   

    看你用什么数据库了
    如果用oracle可以这样写select rownumm,name form table;
      

  2.   

    No.1:
    添加一个计算字段id然后再table的onCalcFields事件里加
    table.fieldbyname('id').asinteger:=table1.recno+1
    就可以了No.2:
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if Column.Index = 5 then
      with DBGrid1.Canvas do begin
        FillRect(Rect);
        TextOut(Rect.Left+2, Rect.Top+2, IntToStr(DBGrid1.DataSource.DataSet.RecNo));
      end;
    end;
      

  3.   

    for i:=0 to dbgrid.Column.Index do
    fields[i].DisplayLabel:=#39+fields[i].fieldname+#39;
      

  4.   

    不能用RecNo属性,如果数据库中有被删除的记录,则可能显示出来为
    No.      Name
    1        Angel Fish
    3        Critters
    4        House Cat
    5        Ocelot
    7        Tetras
    我要的应该是行号,就算有记录被删除,显示出来也应为
    No.      Name
    1        Angel Fish
    2        Critters
    3        House Cat
    4        Ocelot
    5        Tetras
      

  5.   

    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;
      

  6.   

    用RecNo吧,删除后再Requery一下不就OK了?Requery前后设一下书签效果可能是一样的,但效率在数据量很大时就不好说了,呵呵,建议用计算字段取RecNo。
      

  7.   

    建用这个:TStringGrid  好做一点!