原作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 subEnd 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%>