在ASP 中实现ASP.Net 的DataGrid 功能(转载)

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

%
>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值