不使用ReNo赋值,用一个变量
设初始值
i:=1
在oncalcfields中写i=i+1;
试一下
设初始值
i:=1
在oncalcfields中写i=i+1;
试一下
解决方案 »
- 有没有用delphi搞游戏开发的
- 求一个类似于TTreeNodes的类,但是他不关联到界面
- Win窗口最大化的问题...
- 请高手帮忙!
- 哪位有基于ie的HTMLEdit控件编程的经历?高分求编程思路及示例代码!!!!!!!!
- delphi6.0+sql2000,还原数据库.
- 请教,关于动态生成控件的释放问题
- 谁有比较好一点应用图标(要有数据操作的那一类)!!!!!!!!!!!!
- 急招:招聘:Delphi开发工程师 中关村
- 没分了,最后40分提2个问题,大家帮帮忙
- 我在uses里添加了DsgnIntf后,编译时出错说没有DsgnIntf这个文件,请问是怎么回事?
- 一个公历转农历的例子(Delphi源码)
protected
procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
public
ColNo: Integer;//显示序号的列号
RecNo: Integer;//第一可见行行号
end;然后,比如点击某Button进行查询:procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
Column: TColumn;
begin
for I := MyDBGrid.Columns.Count - 1 downto 0 do MyDBGrid.Columns[I].Free;
Query1.Open;
Column := TColumn.Create(MyDBGrid.Columns);
Column.Title.Caption := '序号';
MyDBGrid.ColNo := 1;
MyDBGrid.RecNo := 0;
for I := 0 to Query1.FieldCount - 1 do begin
Column := TColumn.Create(MyDBGrid.Columns);
Column.Field := Query1.Fields[I];
end;
end;在DrawCell里显示序号:procedure TMyDBGrid.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
var
s: String;
R: TRect;
begin
inherited;
if DataSource.DataSet.Active and (ACol = ColNo) and (ARow > 0) then begin
s := IntToStr(RecNo + ARow);
R := ARect;
InflateRect(R, -2, -2);
DrawText(Canvas.Handle, PChar(s), Length(s), R, DT_RIGHT)
end;
end;难点在于控制第一可见行的行号:procedure TMyDBGrid.WMVScroll(var Message: TWMVScroll);
begin
inherited;
with Message do
case ScrollCode of
SB_LINEUP: Dec(RecNo);
SB_LINEDOWN: Inc(RecNo);
SB_PAGEUP: Dec(RecNo, VisibleRowCount);
SB_PAGEDOWN: Inc(RecNo, VisibleRowCount);
SB_THUMBPOSITION:
case Pos of
0: RecNo := 0;
1: Dec(RecNo, VisibleRowCount);
2: Exit;
3: Inc(RecNo, VisibleRowCount);
4: RecNo := DataSource.DataSet.RecordCount;
end;
SB_BOTTOM: RecNo := DataSource.DataSet.RecordCount;
SB_TOP: RecNo := 0;
end;
if RecNo < 0 then RecNo := 0;
if RecNo > DataSource.DataSet.RecordCount - VisibleRowCount then
RecNo := DataSource.DataSet.RecordCount - VisibleRowCount;
Refresh;
end;
Field: TField; State: TGridDrawState);
begin
i_Count:=i_Count+1;// i_Count 是整形的全局变量,在查询时将它设为0
if field=adoquery1.FieldByName('新增字段名') then
dbgrid1.Canvas.TextOut(rect.Left,rect.Top,i_Count);
end;
begin
FieldByName('No').asInteger:=i;
i:=i+1;
end;在 DBGrid 中引用 No 字段就可以了。
哪要这么麻烦,您直接从Tdbgrid继承一个类,就可以访问它的row属性.这可能是最简单的方法.
给它加一个行号.
嘻嘻,其实方法很简单.哪位老兄如果愿意的话一分钟就可以写出来.
Trdbgrid=class(Tdbgrid)
published
property row;
end;
=================================================================
就这么几行代码,您就可以通过row属性来让dbgrid多增加很多功能.
比如让它每隔两行显示的背景色不同,显示行号之类等等.
=======================Try======================================
解决方法:
1.为dbgrid的Columns定义一个新Column,不要加FieldName,把行号的Column放在第一列
2.为dbgrid加一个事件,如下:procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
RowHeight,Row,Col:INteger;
begin
RowHeight := Rect.Bottom - Rect.Top;
Row := (Rect.Top div RowHeight) - 1;
if datacol=0 then //定义行号列
(Sender as TDBGrid).Canvas.TextOut(Rect.Left, Rect.Top, IntToStr(Row));
end;