正在浏览:ASP数据岛操作类
            <% 
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
'            Programming By Smartpig                              ' 
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Class TBGrid 
    public DataSource                '数据源 
    public style                     '表格总风格 
    public HeadStyle                 '表头风格 
    public HeadItemStyle             '表头单独风格 
    public itemStyle                 '单元格独立网络 
    public HeadSort      '表头是否显示排序功能 
    public Columns                   '需要显示的列元素 
    public Alternate                 '是否交替风格 
    public AlternateStyle            '偶数行风格 
    public NormalStyle               '正常风格 
    public DefaultStyle              '默认风格簇 
    public PageSize                  '页大小 
    public AllowPageing              '是否分页 
    public PageingStyle              '页数风格 
    Private Templates                '自定义单元项 
    private CurPage                   '当前页 
    private PageStart     '页面开始运行时间 
    '内容之间的关系 
    'Columns.add "Field","HeadText" 
    'AddTemplate("HeadText",Template) 
    'itemStyle.add "Field","style:adsasd" 
    'HeadSort.add "Field",True 
    'DataSource(Columns.Keys(i)) 
    Private Sub Class_Initialize   ' 设置 Initialize 事件。 
        Set itemStyle  = CreateObject("Scripting.Dictionary") 
        Set HeadSort  = 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 
        PageStart = Timer 
    End Sub 
    Private Sub Class_Terminate   ' 设置 Terminate 事件。 
        Set itemStyle  = Nothing 
        Set HeadSort  = 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 
        Else 
            DefaultStyle = Style 
        end if 
        CurPage = CInt(Request.QueryString("page")) 
        if CurPage = "" then 
            CurPage = 1 
        End If 
        if PageSize = Empty then 
            PageSize = 10 
        end if 
        select Case DefaultStyle 
        Case 1 
            Style     ="align=center border=0 cellpadding=4 cellspacing=1 bgcolor='#cccccc'" 
            Alternate    = 1 
            HeadStyle    = "Height=25 style=""background-color:#006699;color:#ffffff""" 
            AlternateStyle   = "bgColor=#ffffff height=25" 
            NormalStyle    = "height=25 bgcolor=#f5f5f5" 
            AllowPageing   = true 
            tbGrid1.PageingStyle = "bgcolor='#f5f5f5' align='right'" 
        Case 2 
            Style     ="align=center border=0 cellpadding=4 cellspacing=1 bgcolor='#cccccc'" 
            Alternate    = 0 
            HeadStyle    = "Height=25 style=""background-color:#ffffff""" 
            AlternateStyle   = "bgColor=#ffffff height=25" 
            NormalStyle    = "height=25 bgcolor=#ffffff" 
        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 = "<th "&tbStyle&">" 
            tdEnd = "</th>" & vbCrLf 
            Response.Write(tdStart) 
            '加入表头排序功能 
            'Code by Redsun 
            'Date:2005-1-17 
            If HeadSort(clm) Then 
                Response.Write Sort(clm,Columns(clm)) 
            Else 
                Response.Write(Columns(clm)) 
            End If 
            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 < 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>" & vbCrLf 
                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,EndPage,StartPage 
            response.write("<tr>") 
            response.write("<td colspan=" & Columns.Count & " " & PageingStyle & ">") 
            '改进分页功能 
            'Code by Redsun 
            'Date:2005-1-17 
            If CurPage>4 Then 
                If CurPage+2<DataSource.PageCount Then 
                    StartPage = CurPage-2 
                    EndPage = CurPage+2 
                Else 
                    StartPage = DataSource.PageCount-4 
                    EndPage = DataSource.PageCount 
                End If 
            Else 
                StartPage = 1 
                If DataSource.PageCount>5 Then 
                    EndPage = 5 
                Else 
                    EndPage = DataSource.PageCount 
                End If 
            End If 
            If CurPage>1 Then 
                Response.Write "<a title='首页' href='"&GetUrl("page")&"page=1'><font face=webdings>9</font></a> " 
                Response.Write "<a title='上页' href='"&GetUrl("page")&"page="&CurPage-1&"'><font face=webdings>3</font></a> " 
            Else 
                Response.Write "<font face=webdings>9</font> " 
                Response.Write "<font face=webdings>3</font> " 
            End If  
            For i=StartPage to EndPage 
                if i <> CurPage then 
                    response.write("<a title='第"&i&"页' href='"&GetUrl("page")&"page="&i&"'>"&i&"</a> ") 
                Else 
                    response.write("<b>"&i&"</b> ") 
                End if 
            next 
            If CurPage<DataSource.PageCount Then 
                Response.Write "<a title='下页' href='"&GetUrl("&page&")&"page="&CurPage+1&"'><font face=webdings>4</font></a> " 
                Response.Write "<a title='尾页' href='"&GetUrl("&page&")&"page="&DataSource.PageCount&"'><font face=webdings>:</font></a> " 
            Else 
                Response.Write "<font face=webdings>4</font> " 
                Response.Write "<font face=webdings>:</font> " 
            End If 
            Response.Write "   [共"&DataSource.RecordCount&"条] ["&PageSize&"条/页] [共"&DataSource.PageCount&"页]" 
            Response.Write " PageExecute:"&Round((Timer-PageStart)*1000,2)&" MS" 
            response.write("</td></tr>" & vbCrLf) 
        End if 
        'Draw Table end 
        Response.Write("</table>") 
    End sub 
    '==================================================================== 
    '获取当前Url参数的函数 
    'Codeing by Redsun 
    '==================================================================== 
    Private Function GetUrl(RemoveList) 
        Dim ScriptAddress, M_ItemUrl, M_item 
        ScriptAddress = CStr(Request.ServerVariables("SCRIPT_NAME"))&"?"'取得当前地址 
        M_ItemUrl = "" 
        For Each M_item In Request.QueryString 
            If InStr(RemoveList,M_Item)=0 Then 
                M_ItemUrl = M_ItemUrl & M_Item &"="& Server.URLEncode(Request.QueryString(""&M_Item&"")) & "&" 
            End If 
        Next 
        GetUrl = ScriptAddress & M_ItemUrl 
    End Function 
     
    '============================= 
    '实现列表排序 
    '返回Url参数并动态改变排序方式 
    '参数:需要进行排序的字段名,显示的名称 
    '============================= 
    Private Function Sort(SortStr,DispName) 
        If SortStr = "" Or DispName="" Then Exit Function 
        Sort = GetUrl("SOrder,SSort") 
        SSort = UCase(Request.QueryString("SSort")) 
        If SSort = "DESC" Then 
            SSort = "ASC"  
        Else 
            SSort = "DESC" 
        End If 
        Sort = "<a class='headhref' href='"&Sort&"SOrder="&SortStr&"&SSort="&SSort&"'>"&DispName&SortType(SortStr)&"</a>" 
    End Function 
    '----------------------------------------------- 
    '标识排序列为升序还是降序方式 
    '参数:排序列字段名称 
    '----------------------------------------------- 
    Private Function SortType(FieldName) 
        Dim SOrderName 
        SOrderName = Request.QueryString("SOrder") 
        If SOrderName<>FieldName Then Exit Function 
        Dim SSortImg 
        SSortImg = Request.QueryString("SSort") 
        SortType = "<img src='/OrderFormSystem/images/"&SSortImg&".gif' border='0'>" 
    End Function 
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.HeadSort.add "LoginName",True 
tbGrid1.Columns.add "Password","密码" 
tbGrid1.AddTemplate "修改","<a href='aaa.asp?id={UserID}'><font color=red>{RealName}</font></a>" 
tbGrid1.ItemStyle.add "Password","align=right" 
tbGrid1.ItemStyle.add "修改","width=100" 
tbGrid1.PageSize = 5 
tbGrid1.AllowPageing = true 
tbGrid1.PageingStyle = "align=right" 
tbGrid1.Show() 
'CloseDB 
%>