比如说我现在从数据库中取出一笔数据:select * from Table1结果:
   张三   男
   李四   男
   王五   女
只接用DBGridEh显示也是这样现在我想不通过在数据库表中做别的处理,能否给这个DBGridEh中增加一列为序号列如:
 1  张三   男
 2  李四   男
 3  王五   女
期待各位高人的回复,谢谢~~

解决方案 »

  1.   

    查询的时候直接给出select rownum,Table1.* from Table1  如果是oracle中的话.sqlserver也类似可以处理.
      

  2.   

    sqlserver参考http://www.bbsun.cn/t/1/1/2/18187.htmlOracle
    select rownum ename,esex from table;
      

  3.   

    网上找了一个这样来实现:
    DBGrid中顯示行號的終極解決方案(Delphi篇) 
            昨天在大富翁論壇上見一貼子,求在DBGrid中顯示行號的方法,並稱此題為“曠世難題”,我一想,這樣的題目也叫曠世難題?於是自己就動手嚐試,結果發現原來並不簡單,確實是有點難度。後來又在網上搜索良久,也始終找不到一個很好的解決方案,有的也只是在瀏覽狀態下才能實現,而在Insert下卻不能實現,所有的行號都顯示為 -1。 
            難道?delphi真的是無能為力的嗎?我不信,幾經試驗,終於讓我找到了解決方法,代碼如下: //聲明全局變量i procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; 
      DataCol: Integer; Column: TColumn; State: TGridDrawState); 
    begin 
      with DBGrid1.DataSource.DataSet do 
      begin 
        if DataCol = 0 then                           //設置在第一列 
        begin 
          if state<>dsInsert  then i:= recno;           //這句是關鍵 
          DBGrid1.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, IntToStr(i)); 
          inc(i);                  //將i加1 
        end; 
      end; 
    end; procedure TForm1.DataSource1StateChange(Sender: TObject); 
    begin                                            //狀態改變時將i置為1 
      i:=1; 
    end;         問題完美解決了,代碼也很簡單,只是加了一個中間變量 i 。 
            到目前為為止,網上還未見到此種解決方案,如有雷同,純屬巧合。   
                                                                                           
    以上方法後來證明還是有點問題,修正如下: 
    var 
      Form1: TForm1; 
      i:integer; 
      bflag,bflag2:boolean; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); 
    begin 
      adoquery1.Open; 
    end; procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; 
      DataCol: Integer; Column: TColumn; State: TGridDrawState); 
      var 
        rect1:TRect; 
        sValue :string; 
        ss:boolean; 
    begin 
      if DataCol = 0 then                           //設置在第一列 
      begin 
        if DBGrid1.DataSource.DataSet.state<>dsInsert  then 
          i:= DBGrid1.DataSource.DataSet.recno;     Rect1 := Rect; 
        with dbgrid1 do 
        begin 
          Canvas.Brush.Color := clBtnFace; 
          sValue := IntToStr(i); 
          Canvas.FillRect(Rect1); 
          Canvas.Pen.Width := 1; 
          Canvas.Pen.Color := clWhite; 
          Canvas.MoveTo(Rect1.Left, Rect1.Bottom); 
          Canvas.LineTo(Rect1.Left, Rect1.Top); 
          Canvas.LineTo(Rect1.right, Rect1.Top); 
          Canvas.Pen.Color := clBtnShadow; 
          Canvas.LineTo(Rect1.right, Rect1.Bottom - 1); 
          Canvas.LineTo(Rect1.Left, Rect1.Bottom - 1); 
          Rect1.Top := Rect1.Top +1; 
          if State = [gdSelected, gdFocused] then 
          begin 
            if bflag=true then 
            begin 
              sValue:=inttostr(datasource.DataSet.RecordCount +1); 
              i:=datasource.DataSet.RecordCount +1; 
                ss:=true; 
            end; 
          Canvas.Font.Color := clred; 
          end 
          else 
          begin 
            Canvas.Font.Color := clgreen; 
          end; 
          DrawText(Canvas.Handle, PChar(sValue), Length(sValue), Rect1, DT_CENTER); 
        end; 
        if i<=dbgrid1.DataSource.DataSet.RecordCount then 
        begin 
          inc(i); 
        end 
        else 
        begin 
        if (ss<>true) then 
          i:=dbgrid1.DataSource.DataSet.RecordCount+3 -TDrawGrid(DBgrid1).RowCount ; 
        end; 
      end 
      else bflag2:=false; 
    end; procedure TForm1.DataSource1StateChange(Sender: TObject); 
    begin 
      if dbgrid1.DataSource.DataSet.State <>dsbrowse then 
      begin 
        i:=dbgrid1.DataSource.DataSet.RecordCount+3 -TDrawGrid(DBgrid1).RowCount ; 
        bflag := true; 
      end 
      else 
        bflag:=false; 
    end; procedure TForm1.DBGrid1ColEnter(Sender: TObject); 
    begin 
    if (bflag=true)and (dbgrid1.SelectedField.FieldNo <>1) then 
    begin 
      i:=dbgrid1.DataSource.DataSet.RecordCount+3 -TDrawGrid(DBgrid1).RowCount; 
      dbgrid1.Refresh; 
    end; 
    end; procedure TForm1.DBGrid1ColExit(Sender: TObject); 
    begin 
      if (bflag=true)and (dbgrid1.SelectedField.FieldNo =1) then 
    begin 
      i:=dbgrid1.DataSource.DataSet.RecordCount+1; 
      dbgrid1.Refresh; 
    end; 
    end; end. 不知各大虾还有没有更好的方法?
      

  4.   

    SQL SERVER2000中没有像一楼所说的rownum,SQL SERVER2005才有类似此功能的语句!LZ用的是什么数据库?
      

  5.   

    SQL SERVER2000中没有像一楼所说的rownum有这个的。仔细查一下。
      

  6.   

    小弟对SQL不太熟!请问oushengfen(逸帆)大哥RowNum函数在SQL 2000中哪里可以查到(是SQL联机帮助中吗?我没有查到),功能是为所查询出的结果集加行号的吗?请大哥指点一二:)
      

  7.   

    使用拉到本地的dataset.recno不行吗
      

  8.   

    keconghua(E代風花雪月) ( )
    结果全为-1啊