Billpeng Space

技术源自生活
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

在ASP 中实现ASP.Net 的DataGrid 功能

Posted on 2008-11-10 19:49  billpeng  阅读(234)  评论(0编辑  收藏  举报
自从用贯了.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

%
>