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