procedure TForm1.Table1CalcFields(DataSet:   TDataSet);
begin
table1.FieldValues['no']:=table1.RecNo;
end;
//聲明全局變量i
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
with DBGrid1.DataSource.DataSet do
begin
if DataCol = then //設置在第一列
begin
if state<>dsInsert then i:= recno; //這句是關鍵。。。
DBGrid1.Canvas.TextRect(Rect, Rect.Left + , Rect.Top + , IntToStr(i));
inc(i); //將i加1
end;
end;
end; procedure TForm1.DataSource1StateChange(Sender: TObject);
begin //狀態改變時將i置為1
i:=;
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 = 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 := ;
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 - );
Canvas.LineTo(Rect1.Left, Rect1.Bottom - );
Rect1.Top := Rect1.Top +;
if State = [gdSelected, gdFocused] then
begin
if bflag=true then
begin
sValue:=inttostr(datasource.DataSet.RecordCount +);
i:=datasource.DataSet.RecordCount +;
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+ -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+ -TDrawGrid(DBgrid1).RowCount ;
bflag := true;
end
else
bflag:=false;
end; procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
if (bflag=true)and (dbgrid1.SelectedField.FieldNo <>) then
begin
i:=dbgrid1.DataSource.DataSet.RecordCount+ -TDrawGrid(DBgrid1).RowCount;
dbgrid1.Refresh;
end;
end; procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
if (bflag=true)and (dbgrid1.SelectedField.FieldNo =) then
begin
i:=dbgrid1.DataSource.DataSet.RecordCount+;
dbgrid1.Refresh;
end;
end; end.

dbgrid如何在最左边的列上显示行序号的更多相关文章

  1. MATLAB:一个K×M的矩阵,第一列是1,其它都是0,从最后一行开始,每循环一次,最后一行的1往右边移一位,移动到末尾后溢出,重新回到最左边,同时上一行的1往右边移一位

    问题:一个K×M的矩阵,第一列是1,其它都是0,从最后一行开始,每循环一次,最后一行的1往右边移一位,移动到末尾后溢出,重新回到最左边,同时上一行的1往右边移一位.上一行溢出时,上上一行的1移动一位, ...

  2. 固定Table的头部和左边的列-在Knockout Js使用场景下

    要求:固定Table的头部和左边的列 场景:Knockout Js被用于绑定Table的数据源. 固定HTML表格的头部和列是一个很常见的需求.此文:http://www.cnblogs.com/so ...

  3. VARCHAR列上的索引

    一年前,我写了在索引的导航结构里,SQL Server如何存储VARCHAR列.我们都知道,在SQL Server里索引(聚集索引,非聚集索引)的键列有最大900byte的大小限制. 假设现在你想捉弄 ...

  4. SQL Server如何在变长列上存储索引

    这篇文章我想谈下SQL Server如何在变长列上存储索引.首先我们创建一个包含变长列的表,在上面定义主键,即在上面定义了聚集索引,然后往里面插入80000条记录: -- Create a new t ...

  5. 避免在WHERE条件中,在索引列上进行计算或使用函数,因为这将导致索引不被使用

    点击(此处)折叠或打开 --在sal列上创建非唯一索引 scott@TESTDB11>create index idx_emp1_sal on emp1(sal); Index created. ...

  6. UNIQUEIDENTIFIER列上的统计信息

    UNIQUEIDENTIFIER列上的统计信息非常有意思,在它上面有一些很令人讨厌的行为.我们来看下. 问题重现(The repro) 为了向你展示我们刚抱怨的行为,我用下列简单的表定义创建了一个数据 ...

  7. DataTable列上多值运算

    1.从网上找了个中缀算法(也不知道什么前缀后缀,抱歉),可以对字符串表达式进行运算 2.有些时候还是会用到ASCII码表的 char c = expression[k];//expression为一字 ...

  8. Ext JS treegrid 发生的在tree上增加itemclick 与在其它列上增加actioncolumn 发生事件冲突(event conflict)的解决办法

    Ext JS treegrid 发生的在tree上增加itemclick 与在其它列上增加actioncolumn 发生事件冲突(event conflict)的解决办法 最近在适用Ext JS4开发 ...

  9. WPF DataGrid某列使用多绑定后该列排序失效,列上加入 SortMemberPath 设置即可.

    WPF DataGrid某列使用多绑定后该列排序失效 2011-07-14 10:59hdongq | 浏览 1031 次  悬赏:20 在wpf的datagrid中某一列使用了多绑定,但是该列排序失 ...

随机推荐

  1. Android中使用MediaCodec硬件解码,高效率得到YUV格式帧,快速保存JPEG图片(不使用OpenGL)(附Demo)

    MediaCodec的使用demo: https://github.com/vecio/MediaCodecDemo https://github.com/taehwandev/MediaCodecE ...

  2. chrome JS关闭当前页无效问题

    如果没有父窗口,JS中 window.opener = null; window.open("", "_self"); window.close(); 对chr ...

  3. 【Shader】这是一篇记录随笔,我要开始学Shader了!

    背景: 前天学校有场招聘会,转了一圈只看到一家和unity有关的公司,还是做VR游戏的,然后HR也很好说话.和我说话的HR正好是做UnityVR方面的,聊了会受益匪浅,自己就像是找到了方向似的,突然很 ...

  4. java事务 深入Java事务的原理与应用

    一.什么是JAVA事务 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (iso ...

  5. Spring Boot 学习目录

    之前一直做.net 的开发,后来发现C# 在生态方面和Java还是差了好多,而且目前有很多.net 方面的技术也是借鉴了Java相关的开发,所以最近准备学习了解一下java 相关的web开发,从中学习 ...

  6. ats Linux路由器上内联

    路由设置假定客户端集在单个物理接口后面的不同网络上. 出于本例的目的,我们将假设: 客户端位于172.28.56.0/24网络上路由器连接网络172.28.56.0/24和192.168.1.0/24 ...

  7. Tomcat源码学习(3)—— Digester介绍

    Digester方法详解: 通读Digester之前先分析下他的结构: 1.1该类继承了方法DefaultHandler2,DefaultHandler2继承了DefaultHandler是和sax解 ...

  8. 从零开始的Python学习Episode 23——进程

    ---恢复内容开始--- 进程 由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Python提供了非常好用 ...

  9. pkill命令详解

    基础命令学习目录首页 原文链接:http://www.mamicode.com/info-detail-2315063.html 一:含义: 是ps命令和kill命令的结合,按照进程名来杀死指定进程, ...

  10. Thunder团队--Beta发布用户使用报告

    Thunder爱阅app Beta 发布用户使用报告 用户数量:14人 以下为用户评论:(注:为了保护用户的姓名权,以下用户名以昵称形式给出.) 序号 昵称 个人信息 获得软件途径 使用次数 用户评论 ...