原作Blog地址:http://www.cnblogs.com/smartpig/
自从用贯了.Net的DataGrid就再也懒得去用ASP画表格了,于是想了一个折中的办法,访照DataGrid的功能写了一个TBGrid 类,这样可以轻松的重用代码.比起每次都得重复劳动方便多了.希望能给用得到的人带去一些方便.用法很简单,看后面的例子便一目了然了.有什么不完善的地方希望大家有和我讨论.
<
%
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
Programming By Smartpig '
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Class TBGrid

public
DataSource
'
数据源
public
style
'
表格总风格
public
HeadStyle
'
表头风格
public
HeadItemStyle
'
表头单独风格
public
itemStyle
'
单元格独立网络
public
Columns
'
需要显示的列元素
public
Alternate
'
是否交替风格
public
AlternateStyle
'
偶数行风格
public
NormalStyle
'
正常风格
public
DefaultStyle
'
默认风格簇
public
PageSize
'
页大小
public
CurPage
'
当前页
public
AllowPageing
'
是否分页
public
PageingStyle
'
页数风格
Private
Templates
'
自定义单元项
'
内容之间的关系
'
Columns.add "Field","HeadText"
'
AddTemplate("HeadText",Template)
'
itemStyle.add "Field","style:adsasd"
'
DataSource(Columns.Keys(i))
Private
Sub
Class_Initialize
'
设置 Initialize 事件。
Set
itemStyle
=
CreateObject
(
"
Scripting.Dictionary
"
)
Set
HeadItemStyle
=
CreateObject
(
"
Scripting.Dictionary
"
)
Set
Columns
=
CreateObject
(
"
Scripting.Dictionary
"
)
Set
Templates
=
CreateObject
(
"
Scripting.Dictionary
"
)
Set
DataSource
=
CreateObject
(
"
ADODB.Recordset
"
)
Alternate
=
0
End Sub
Private
Sub
Class_Terminate
'
设置 Terminate 事件。
Set
itemStyle
=
Nothing
Set
HeadItemStyle
=
Nothing
Set
Columns
=
Nothing
Set
DataSource
=
Nothing
End Sub
Private
Sub
InitTable()
'
Set FieldsNum = DataSource.Fields.Count
'
Set RowsNum = DataSource.RecordCount
if
Columns.Count
=
0
then
For
i
=
0
to
DataSource.Fields.Count
-
1
Columns.add DataSource.Fields(i).Name,DataSource.Fields(i).Name
response.Write(DataSource.Fields(i).Name)
Next
end
if
if
IsEmpty
(Style)
and
IsEmpty
(NormalStyle)
then
DefaultStyle
=
1
end
if
if
PageSize
=
Empty
then
PageSize
=
10
end
if
select
Case
DefaultStyle
Case
1
Style
=
"
border=1 cellpadding=2 cellspaccing=0 borderColor=#000000 style=""Border-collapse:collapse;font-size:12px"""
Alternate
=
1
HeadStyle
=
"
Height=25 bgColor=#CCCCCC"
AlternateStyle
=
"
bgColor=#EEEEEE height=20"
NormalStyle
=
"
height=20"
Case
Else
End
Select
End sub
public
Sub
AddTemplate(ByVal ColumnName,ByVal Template)
Columns.add ColumnName,ColumnName
Templates.add ColumnName,Template
End Sub

public
Sub
Show()
InitTable()
Dim
tableStr
Dim
tdStart,tdEnd,tbStyle,tbContent
Dim
curRow
Dim
clm
Dim
regEx,Match,Matches
tableStr
=
"
<table
"
&
style
&
"
>
"
&
vbCrLF
'
Draw Table Head
Response.Write(tableStr)
Response.Write(
"
<tr>
"
)
for
Each
clm in Columns.Keys()
tbStyle
=
HeadStyle
&
"
"
&
HeadItemStyle(clm)
tdStart
=
"
<td
"
&
tbStyle
&
"
>"
tdEnd
=
"
</td>"
Response.Write(tdStart)
Response.Write(Columns(clm))
Response.Write(tdEnd)
Next
Response.Write(
"
</tr>
"
&
vbCrLF)
'
Draw Table items
curRow
=
1
if
AllowPageing
<>
Empty
then
DataSource.PageSize
=
PageSize
else
DataSource.PageSize
=
DataSource.RecordCount
end
if
if
CurPage
=
Empty
then
CurPage
=
1
end
if
if
CurPage
<
1
then
DataSource.AbsolutePage
=
1
end
if
if
CurPage
>=
DataSource.PageCount
then
DataSource.AbsolutePage
=
DataSource.PageCount
end
if
if
CurPage
>=
1
and
CurPage
<=
DataSource.PageCount
then
DataSource.AbsolutePage
=
CurPage
end
if

for
curRow
=
1
to
DataSource.PageSize
if
DataSource.EOF
then
Exit
For
end
if
Response.Write(
"
<tr>
"
)
for
Each
clm in Columns.Keys()
if
Alternate
=
0
then
tbStyle
=
NormalStyle
&
"
"
&
ItemStyle(clm)
else
if
curRow
mod
2
=
0
then
tbStyle
=
AlternateStyle
&
"
"
&
ItemStyle(clm)
else
tbStyle
=
NormalStyle
&
"
"
&
ItemStyle(clm)
end
if
end
if
tdStart
=
"
<td
"
&
tbStyle
&
"
>"
tdEnd
=
"
</td>"
if
Templates(clm)
=
Empty
then
tbContent
=
DataSource(clm)
else
tbContent
=
Templates(clm)
Set
regEx
=
New
RegExp
regEx.Pattern
=
"
{[A-Za-z0-9_-]+}"
regEx.IgnoreCase
=
True
regEx.Global
=
True
Set
Matches
=
regEx.
Execute
(Templates(clm))
For
each
match in matches
On
Error
Resume
Next
tbContent
=
Replace
(tbContent,Match.Value, _DataSource(
Mid
(Match.Value,
2
,
Len
(Match.Value)
-
2
)),
1
)
Next
end
if
Response.Write(tdStart)
Response.Write(tbContent)
Response.Write(tdEnd)
Next
Response.Write(
"
</tr>
"
&
vbCrLF)
DataSource.MoveNext
Next
'
Draw Pageing Row
if
DataSource.PageCount
>
1
and
LCase
(pageingStyle)
<>
"
none
"
then
Dim
i
response.write(
"
<tr>
"
)
response.write(
"
<td colspan=
"
&
Columns.Count
&
"
"
&
PageingStyle
&
"
>
"
)
for
i
=
1
to
DataSource.PageCount
if
i
<>
CurPage
then
response.write(
"
<a href='
"
&
Request.ServerVariables(
"
SCRIPT_NAME
"
)
&
"
?page=
"
&
i
&
"
'>
"
)
end
if
response.write(i)
if
i
<>
CurPage
then
response.write(
"
</a>
"
)
end
if
response.write(
"
"
)
next
response.write(
"
</td></tr>
"
&
vbCrLf)
end
if
'
Draw Table end
Response.Write(
"
</table>
"
)
end sub

End
Class

'
users Like { UserID,LoginName,Password,RealName,Age,Gender,
}
'
initDB
'
Rs.Open "Select * from users",Cn
'
Dim tbGrid1
'
Set tbGrid1 = New TBGrid
'
Set tbGrid1.DataSource = Rs
'
tbGrid1.Columns.add "LoginName","用户名"
'
tbGrid1.ItemStyle.add "Password","align=right"
'
tbGrid1.ItemStyle.add "修改","width=100"
'
tbGrid1.AddTemplate "修改","<a href='aaa.asp?id={UserID}'><font color=red>{RealName}</font></a>"
'
tbGrid1.Columns.add "Password","密码"
'
tbGrid1.PageSize = 5
'
tbGrid1.AllowPageing = true
'
tbGrid1.PageingStyle = "align=right"
'
tbGrid1.CurPage = CInt(Request("page"))
'
tbGrid1.Show()
'
CloseDB
%
>




























































































































































































































