高手进来帮个忙呀,一个关于DBGridEh增加一列显示行号的的功能,谢谢~~

keconghua 2006-07-01 11:25:06
比如说我现在从数据库中取出一笔数据:select * from Table1

结果:
张三 男
李四 男
王五 女
只接用DBGridEh显示也是这样

现在我想不通过在数据库表中做别的处理,能否给这个DBGridEh中增加一列为序号列如:
1 张三 男
2 李四 男
3 王五 女


期待各位高人的回复,谢谢~~
...全文
636 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
keconghua 2006-09-03
  • 打赏
  • 举报
回复
好像在没有记录时显示为-1,呵呵
cjs5210 2006-09-02
  • 打赏
  • 举报
回复
keconghua(E代風花雪月) ( )
结果全为-1啊
jsmicrofox 2006-08-17
  • 打赏
  • 举报
回复
使用拉到本地的dataset.recno不行吗
photo2000 2006-07-19
  • 打赏
  • 举报
回复
我也需要这样的功能
liangpei2008 2006-07-03
  • 打赏
  • 举报
回复
小弟对SQL不太熟!请问oushengfen(逸帆)大哥RowNum函数在SQL 2000中哪里可以查到(是SQL联机帮助中吗?我没有查到),功能是为所查询出的结果集加行号的吗?请大哥指点一二:)
oushengfen 2006-07-03
  • 打赏
  • 举报
回复
SQL SERVER2000中没有像一楼所说的rownum

有这个的。仔细查一下。
liangpei2008 2006-07-03
  • 打赏
  • 举报
回复
SQL SERVER2000中没有像一楼所说的rownum,SQL SERVER2005才有类似此功能的语句!LZ用的是什么数据库?
keconghua 2006-07-03
  • 打赏
  • 举报
回复
网上找了一个这样来实现:
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.

不知各大虾还有没有更好的方法?
magicsign 2006-07-01
  • 打赏
  • 举报
回复
sqlserver参考http://www.bbsun.cn/t/1/1/2/18187.html

Oracle
select rownum ename,esex from table;
locool 2006-07-01
  • 打赏
  • 举报
回复
查询的时候直接给出select rownum,Table1.* from Table1 如果是oracle中的话.sqlserver也类似可以处理.

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧