zoukankan      html  css  js  c++  java
  • 在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

    %
    >
  • 相关阅读:
    some math words
    图论中匹配问题的三种算法
    如何查看静态库和动态库是32位还是64位
    C/C++语言的版本, Visual Studio版本
    codeblocks
    文件类型
    上海职称评定
    微信登录
    手机归属地查询
    创建AOP静态代理(上篇)
  • 原文地址:https://www.cnblogs.com/yeagen/p/1330915.html
Copyright © 2011-2022 走看看