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

  %>