Datagrid加入一列显示行号 or 自增列 2012/04/28

来源:互联网 发布:怎么测试80端口 编辑:程序博客网 时间:2024/06/14 20:30

以下这种方法不是很好,很消耗数据库时间,有上万条数据的时候,跑起来很慢,当然与服务器也有一定的关联,暂且用之。

 

在VB6中,Datagrid控件应该是初学者最喜使用的控件之一,它对数据简单绑定却又往往束缚住手脚。正确的使用的Datagrid必须首先了解它的本质。

Datagrid的本质在于它从来就不是一个真正的网格控件。我们可以片面理解,一个真正的网格控件就是必须将数据脱离Recordset而读进本身的控件。如:Msflexgrid,Mshflexgrid,Spread这些都属于真实的网格控件,我们可以独立的设置这些控见的rows,cols。相反Datagrid,Listview则不属于网格控件。

了解完本质,则可以清楚的知道,因为Datagrid不能将数据读进自身,所以实际它是脱离不了Recordset,则我们需要显示的数据效果,只要操纵Recordset的表现形式就可完成。

Datagrid加入一列显示行号这是论坛中很多次提及的问题。实际上加一列对应的行数,我们只要在Recordset加入一列虚拟的行数。

以pubs中的employee表为示范。
SQL语句为:SELECT * FROM employee


emp_id          fname   minit   lname  
PMA42628M Paolo M Accorti
PSA89086M Pedro S Afonso
VPA30890F Victoria P
...             ...

当需要加入一列列名为rowid的自增列则可以这样写:
SELECT rowid=(select count( *) FROM employee  where emp_id<=a.emp_id), *
FROM employee as a Order by rowid


row_id  emp_id          fname   minit   lname
1 A-C71970F Aria   Cruz
2 AMD15433F Ann M Devon
3 A-R89858F Annette   Roulet

这样就相当于Recordset加入了此列,当绑定在Datagrid,第一列就会显示相对应的行号。

进阶:
显示employee表fname以M打头的数据的

SQL:SELECT emp_id,fname,lname from employee where fname like 'M%'


显示结果:

MAP77183M Miguel Paolino
MAS70474F Margaret Smith
MFS52347M Martin Sommer
MGK44605M Matti Karttunen
MJP25939M Maria Pontes
M-L67958F Maria Larsson
MMS49649F Mary Saveley
M-P91209M Manuel Pereira
M-R38834F Martine Rance

加入自增列RowId
SQL语句:SELECT Rowid=(SELECT count(*) from Employee where emp_id<=a.emp_id and fname like'M%'),
a.emp_id,a.fname,a.lname FROM employee as a where a.fname like'M%'

显示结果:
1 MAP77183M Miguel Paolino
2 MAS70474F Margaret Smith
3 MFS52347M Martin Sommer
4 MGK44605M Matti Karttunen
5 MJP25939M Maria Pontes
6 M-L67958F Maria Larsson
7 MMS49649F Mary Saveley
8 M-P91209M Manuel Pereira
9 M-R38834F Martine Rance

注意:

1、如没有在生成Rowid的SELECT中加入fname like 'm%' 则,加入的自增列数据将会以employee整个表的数据进行排列,而不会以employee中fname like 'm%'的数据进行自增。

2、这与利用IDENTITY增加一列自增是有差别的。

3、当然最无聊的办法可以去建立一个临时表,对这个临时表数据进行操作,最后在DROP

原创粉丝点击