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


    自从用贯了.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

    %
    >
  • 相关阅读:
    【php】session读写锁
    【php】set_include_path和get_include_path用法详解
    【php】header下载文件后,文件变大的问题;(ob_clean()清空缓存)
    php反射机制应用
    vue内置组件 transition 和 keep-alive 使用
    vue中$router以及$route的使用
    通过LxRunOffline迁移Win10的Linux子系统
    vue Router——进阶篇
    vue keep-alive
    go语法和特点零碎总结
  • 原文地址:https://www.cnblogs.com/yeagen/p/1330915.html
Copyright © 2020-2023  润新知