您的位置:首页 > 编程语言 > ASP

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

2004-07-19 22:43 543 查看

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




%>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐