|          
 自动生成表格,自动完成删除,编辑、填加、分页功能,自定义样式表头样式 代码用两个类来实现 一开始考虑得太多,功能想得太强大,通用性越强,asp类跑起来越慢,做到后来没兴趣,还有很多功能没有完成,如字段类型验证,显示图片、控件等,帖出代码供大这一起学习研究,有兴趣的可以将这些功能加上 示例: set a = new DataGrid'a.Connstr="Provider=SQLOLEDB.1;User ID=sa;Password=servser;Initial Catalog=temp_blue;Data Source=server;Connect Timeout=30;Auto Translate=True;Packet Size=4096;"
 a.Connstr="Provider=Microsoft.Jet.OLEDB.4.0;"&" Data Source="&server.mappath("test.mdb") '连接ACCSS字符串
 a.SQLString="select * from table1" '生成datagrid所显示的记录集的sql语句
 a.isAddnew = 1 '是否可以填加新记录
 a.Table = "table1" 'datagrid控制的主表
 a.UniqueField = "ID"  '标志字段,所有记录不重复整型即可
 a.PagePosition = "down" '分页显示位置,up上面,down下面 updown上下 ,其它为不显示
 a.pagesize = 5 '每页显示记录数
 a.Pagenumber = 10 '显示页数
 a.BorderColor="#ff0000" '默认为效果图显示 a.BackGround="#00ff00" '默认为效果图显示 a.BorderWidth=1 默认为1 a.set b1 = new column
 b1.Field = "id"  '此列所绑定的数据库字段
 b1.Title = "标志"  '标题
 b1.Align = "center" ' 对齐方式
 a.AddColumn(b1)   '把此列插入到datagrid
 set b2 = new column
 b2.Field="firstname"
 b2.Title="姓"
 a.AddColumn(b2)
 set b3 = new columnb3.Field = "lastname"
 b3.Title = "名"
 a.AddColumn(b3)
 set b4 = new columnb4.Field = "logintimes"
 b4.Title = "登陆次数"
 b4.ReadOnly = true  '设为只读,不会出现在编辑框中和新增记录中
 a.AddColumn(b4)
 set b5 = new columnb5.Title="编辑"
 b5.Columntype ="edit"  '编辑列
 b5.EditCommandText = "编辑"  '编辑按钮文本
 a.AddColumn(b5)
 set b6 = new columnb6.align = "center"
 b6.Width = 200
 b6.Columntype = "delete"
 b6.DeleteCommandText = "删除按钮"
 b6.Title ="删除"
 a.AddColumn(b6)
 a.CreateGrid()
 set b1 = nothingset b2 = nothing
 set b3 = nothing
 set b4 = nothing
 set b5 = nothing
 set b6 = nothing
 类文件如下:
 <%Class DataGridPrivate pages
 Private strSQLString
 Public  Connstr
 Private Columns
 Private index
 Private strUniqueField,strTable
 Private rs
 Private strCellspacing,strCellpadding,strCssClass
 Private strBorderColorDark,strBorderColorLight,strBackGroundColor
 Private intBorderWidth
 Private strHeadStyle,strHeadBackgroudColor
 Private strStyle,strAlternateStyle
 Private UniqueKey,dg_action,currPage
 Private actionURL,pageURL,operationURL,formURL
 Public PagePosition,Pagesize,Pagenumber
 
 Public isAddnew
 
 Private Sub Class_Initialize()
 set Columns = Server.CreateObject("Scripting.Dictionary")
 index = 0
 Pagesize = 10
 Pagenumber = 10
 PagePosition = "updown"
 strSQLString = Session("DSN")
 uniquekey = Request("uniquekey")
 dg_action = Request("dg_action")
 currPage = Request("Page")
 actionURL = Request.ServerVariables("Script_name") & "?page=" & currPage
 if dg_action= "edit" then formURL = actionURL& "&dg_action=update&uniquekey="&uniquekey
 operationURL = Request.ServerVariables("Script_name") & "?page=" & currPage& "&uniquekey=" & uniquekey
 pageURL = Request.ServerVariables("Script_name")&"?1=1"
 if currPage = "" or isnull(currPage) then currPage = 1
 
 strBorderColorDark ="#f7f7f7"
 strBorderColorLight = "#cccccc"
 strBackgroundColor = "#f7f7f7"
 strHeadBackgroudColor = "#F2F2F2"
 intBorderWidth  = 1
 strAlternateStyle ="bgcolor=#f6f6f6"
 isAddnew = 1
 Set rs = Server.CreateObject("Adodb.Recordset")
 
 End Sub
 
 Private Sub Class_Terminate()
 rs.close
 set rs = nothing
 set Columns  = nothing
 End Sub
 
 Public Property Get SQLString()
 SQLString = strSQLString
 End Property
 
 Public Property Let SQLString(Value)
 strSQLString = Value
 End Property
 
 
 Public Property Let Style(Value)
 strStyle = Value()
 End Property
 
 Public Property Get Style()
 Style = strStyle
 End Property
 
 Public Property Let UniqueField(Value)
 strUniqueField = lcase(Value)
 End Property
 
 Public Property Get UniqueField()
 UniqueField = strUniqueField
 End Property
 
 Public Property Let Table(Value)
 strTable = lcase(Value)
 End Property
 
 Public Property Get Table()
 Table = strTable
 End Property
 
 Public Property Let DbConn(Value)
 strConn = Value
 End Property
 
 Public Property Get Version()
 Version = "1.0"
 End Property
  Public Property Let Cellspacing(Value)strcellspacing = Value
 End Property
 
 Public Property Get Cellspacing()
 Cellspacing = strcellspacing
 End Property
 
 Public Property Let cellpadding(Value)
 strcellpadding = Value
 End Property
 
 Public Property Get cellpadding()
 cellpadding = strCellspacing
 End Property
 
 
 Public Property Let CssClass(Value)
 strCssClass = Value
 End Property
 
 Public Property Get CssClass()
 CssClass = strCssClass
 End Property
 
 Public Property Let BorderColor(value)
 strBorderColorDark = value
 End Property
 
 Public Property Get BorderColor()
 BorderColor = strBorderColorDark
 End Property
 
 Public Property Let BackGround(value)
 strBorderColorDark = value
 strBackgroundColor = value
 End Property
 
 Public Property Get BackGround()
 BackGround = strBorderColorLight
 End Property
 
 Public Property Let BorderWidth(value)
 intBorderWidth = value
 End Property
 
 Public Property Get BorderWidth()
 BorderWidth = intBorderWidth
 End Property
 
 Public Property Get nColumns(intIndex)
 nkeys = Columns.Keys
 nItems = Columns.Items
 for i = 0 to Columns.Count - 1
 if intIndex = nkeys(i) then
 set tmp = nItems(i)
 end if
 next
 set nColumns = tmp
 End Property
 
  Private Function page(totalpage,pagenumber,thisPage)MinPage = thisPage - pagenumber/2
 if MinPage <= 0 then MinPage = 1
 'if MinPage + pagenumber/2 > totalpage then Maxpage = totalpage else Maxpage = MinPage + pagenumber
 for i = MinPage to MinPage + pagenumber -1
 if i <= totalpage then
 if cint(thisPage)<> cint(i) then
 strtemp = strtemp & "<a href="&pageURL&"&page=" & i &">" & i & "</a> "
 else
 strtemp = strtemp & i&" "
 end if
 else
 page = strtemp
 Exit Function
 end if
 Next
 page = strtemp
 End Function
 
 Public Sub CreateGrid()
 nkeys = Columns.Keys
 nItems = Columns.Items
 If dg_action="update" then
 dim strsql
 strsql = "update "& table & " set "
 dim j
 j=0
 For i = 0 to index - 1
 if nItems(i).Columntype<>"edit" and nItems(i).Columntype <> "delete" and not nItems(i).readonly and nItems(i).field<>uniquefield then
 if j <> 0 then strsql = strsql & ","
 Select case nItems(i).DataType
 Case "text"
 strsql = strsql & nItems(i).field & "='" & Request(nItems(i).field)&"' "
 Case "number","int","bigint","tinyint"
 strsql = strsql & nItems(i).field & "=" & Request(nItems(i).field) & " "
 Case "date","time","datetime"
 strsql = strsql & nItems(i).field & "=convert(datetime,'" & Request(nItems(i).field)&"',102) "
 Case else
 strsql = strsql & nItems(i).field & "='" & Request(nItems(i).field)&"' "
 End select
 j=j+1
 End if
 
 Next
 strsql = strsql & " where " & UniqueField &" = "& uniquekey
 set rst = Server.CreateObject("adodb.recordset")
 rst.Open strsql,connstr
 'rst.Close
 set rst = nothing
 set strsql = nothing
 End if
 
 If dg_action="delete" then
 strsql = ""
 strsql = "delete  from " & table & " where  " & UniqueField &" = "& uniquekey
 response.Write strsql
 set rst = Server.CreateObject("adodb.recordset")
 rst.Open strsql,connstr
 'rst.Close
 set rst = nothing
 End if
 
 IF dg_action = "addnew" and isAddnew = 1 then
 'dim strsql
 set rst = Server.CreateObject("adodb.recordset")
 rst.open table,connstr,1,3,2
 rst.addnew
 j=0
 For i = 0 to index - 1
 if nItems(i).Columntype<>"edit" and nItems(i).Columntype <> "delete" and not nItems(i).readonly and nItems(i).field<>uniquefield then
 if j <> 0 then strsql = strsql & ","
 Select case nItems(i).DataType
 Case "text"
 rst(nItems(i).field) =   Request(nItems(i).field)
 Case "number","int","bigint","tinyint"
 rst(nItems(i).field) =   Request(nItems(i).field)
 Case "date","time","datetime"
 rst(nItems(i).field) =   Request(nItems(i).field)
 Case else
 rst(nItems(i).field) =   Request(nItems(i).field)
 End select
 j=j+1
 End if
 Next
 rst.update
 set rst = nothing
 End if
 
 
 rs.Open strSQLString,connstr,1,1
 
 strTable= "<table border=" & intBorderWidth & " bordercolordark=" & strBorderColorDark & " bordercolorlight=" & strbordercolorlight & "class=" &cssclass & " cellspacing=0>" '加样式
 strTable = strTable & "<form action=" & formURL & " name=""gridform"" method=post>"
 if PagePosition="up" or PagePosition="updown" then strTable = strTable & "<tr><td colspan="& index &">"& page(rs.PageCount,Pagenumber,currPage )&"</td></tr>"
 strTable = strTable & "<tr bgcolor=" & strHeadBackgroudColor & ">"
 for i = 0 to index - 1
 if nItems(i).Title<>""  then
 strTable = strTable & "<td " & nItems(i).HTMLstr & ">" & nItems(i).Title &"</td>"
 else
 strTable = strTable & "<td " & nItems(i).HTMLstr & ">" & rs.Fields(i).Item.Name  &"</td>"
 end if
 
 Next
 strTable = strTable & "</tr>"
 if cint(currPage) > cint(rs.PageCount) then currPage = rs.PageCount
 intPage = Pagesize
 rs.PageSize = pagesize
 rs.AbsolutePage = currPage
 
 do while not rs.eof and intPage > 0
 intPage = intPage - 1
 dbuniquekey = rs(uniquefield)
 If intPage mod 2  then
 strTable = strTable & "<tr>"
 Else
 strTable = strTable & "<tr "& strAlternateStyle &">"
 End if
 'response.Write len(dg_action)>0 and int(dbuniquekey) = int(uniquekey)
 if dg_action ="edit"  and int(dbuniquekey) = int(uniquekey)  then
 for i = 0 to index - 1
 if nItems(i).Columntype<>"edit" and nItems(i).Columntype <> "delete" and not nItems(i).readonly and nItems(i).field<>uniquefield then
 strTable = strTable & "<td " & nItems(i).HTMLstr &"><input type=Text name=""" & rs.Fields(nItems(i).field).Name &""" value=""" & rs(nItems(i).field) &"""></td>"
 else
 Select case lcase(nItems(i).Columntype)
 Case "label"
 strTable = strTable & "<td "& nItems(i).HTMLstr &">" & rs(nItems(i).field) &"</td>"
 Case "radio"
 
 Case "image"
 
 Case "checkbox"
 
 Case "textbox"
 strTable = strTable & "<td " & nItems(i).HTMLstr &"><input type=text name=""" & rs.Fields(i).Name &""" value=" & rs(nItems(i).field) &"></td>"
 Case "link"
 
 Case "edit"
 if UniqueField="" then ErrorMsg="UniqueField not set"
 if dg_action = "edit" then
 strTable = strTable & "<td "&nItems(i).HTMLstr &"><a href=""javascript:document.gridform.submit()"">"&nItems(i).UpdateCommandText&"</a> <a href="&actionURL&">"&nItems(i).CancelCommandText&"</a></td>"
 else
 strTable = strTable & "<td "&nItems(i).HTMLstr &"><a href="&actionURL&"&dg_action=edit&uniquekey=" & rs(UniqueField) &">"&nItems(i).EditCommandText&"</a></td>"
 end if
 Case "delete"
 if UniqueField="" then ErrorMsg="UniqueField not set"
 strTable = strTable & "<td "&nItems(i).HTMLstr &"><a href="&actionURL&"&dg_action=delete&uniquekey=" & rs(UniqueField) &">"&nItems(i).DeleteCommandText&"</a></td>"
 Case "update"
 
 Case else
 strTable = strTable & "<td " & nItems(i).HTMLstr & ">" & rs(nItems(i).field) & "</td>"
 End select
 end if
 
 Next
 else
 for i = 0 to index - 1
 select case lcase(nItems(i).Columntype)
 Case "label"
 strTable = strTable & "<td " & nItems(i).HTMLstr & ">" & rs(nItems(i).field) &"</td>"
 Case "radio"
 
 Case "image"
 
 Case "checkbox"
 
 Case "textbox"
 strTable = strTable & "<td " & nItems(i).HTMLstr &"><input type=text value=" & rs(nItems(i).field) &"></td>"
 Case "link"
 
 Case "edit"
 if UniqueField="" then ErrorMsg="UniqueField not set"
 strTable = strTable & "<td " & nItems(i).HTMLstr & "><a href=" & actionURL & "&dg_action=edit&uniquekey=" & rs(UniqueField) & ">" & nItems(i).EditCommandText & "</a></td>"
 Case "delete"
 if UniqueField="" then ErrorMsg="UniqueField not set"
 strTable = strTable & "<td " & nItems(i).HTMLstr &"><a href=" & actionURL & "&dg_action=delete&uniquekey=" & rs(UniqueField) &">" & nItems(i).DeleteCommandText&"</a></td>"
 Case "update"
 
 Case else
 strTable = strTable & "<td " & nItems(i).HTMLstr &">" & rs(nItems(i).Field) & "</td>"
 End select
 Next
 End if
 
 
 'End if
 rs.movenext
 strTable = strTable & "</tr>"& vbcrlf
 loop
 
 if PagePosition="down" or PagePosition="updown" then strTable = strTable & "<tr><td colspan="& index &">"& page(rs.PageCount,Pagenumber,currPage )
 'strTable =strTable&"<tr>"
 for i = 0 to index - 1
 if nItems(i).Columntype<>"edit" and nItems(i).Columntype <> "delete" and not nItems(i).readonly and nItems(i).field<>uniquefield then
 'strTable = strTable & "<td " & nItems(i).HTMLstr &"><input type=Text name=""" & rs.Fields(nItems(i).field).Name &"""></td>"
 else
 'strTable = strTable & "<td " & nItems(i).HTMLstr &"> </td>"
 end if
 next
 strTable =strTable&"</tr>"
 
 strTable = strTable & "</form></table>"
 If isAddnew = 1 then
 strTable = strTable & "<form action=""?dg_action=addnew"" name=""dgridadd"" method=""post""><table border=" & intBorderWidth & " bordercolordark=" & strBorderColorDark & " bordercolorlight=" & strbordercolorlight & " cellspacing=0><tr>"
 for i = 0 to index - 1
 if nItems(i).Columntype<>"edit" and nItems(i).Columntype <> "delete" and not nItems(i).readonly and nItems(i).field<>uniquefield then
 strTable = strTable & "<td " & nItems(i).HTMLstr &">" & rs.Fields(nItems(i).field).Name &"</td>"
 else
 'strTable = strTable & "<td " & nItems(i).HTMLstr &">"&nItems(i).Title&"</td>"
 end if
 next
 strTable = strTable & "<td rowspan=2><a href=""javascript:document.dgridadd.submit()"">New</a></td></tr><tr>"
 
 for i = 0 to index - 1
 if nItems(i).Columntype<>"edit" and nItems(i).Columntype <> "delete" and not nItems(i).readonly and nItems(i).field<>uniquefield then
 strTable = strTable & "<td " & nItems(i).HTMLstr &"><input type=Text name=""" & rs.Fields(nItems(i).field).Name &"""></td>" & vbcrlf
 else
 'strTable = strTable & "<td " & nItems(i).HTMLstr &"> </td>"
 end if
 next
 strTable = strTable &"</tr></table></form>"
 End if
 Response.Write strTable
 
 End Sub
 
 Public Sub AddColumn(cColumn)
 'set tem = new Column
 'tem = cColumn
 'response.Write cColumn.ColumnHTMLstr
 Columns.Add index,cColumn
 index = index + 1
 'Columns.Items(i)
 End Sub
 
 End Class
   Class ColumnPrivate strType
 Private strAlign
 Private strStyle
 Private ColumnText
 Private intWidth
 Private intHight
 Private strfield
 Private strTitle
 Private strEvent
 Private strCssClass
 Private strText
 Private strEditCommandText,strUpdateCommandText,strCancelCommandText,strDeleteCommandText
 Private strRegExp
 Private strReadOnly
 Private strDataType
 Public MaxValue,MinValue,MaxLength,MinLength,IsEmpty,IsChar,IsNumber,isCharNumber,isDate,isEmail
 
 
 Private Sub Class_Initialize()
 
 ColumnType = "Text"
 strEditCommandText = "EDIT"
 strUpdateCommandText = "UPDATE"
 strCancelCommandText = "CANCEL"
 strDeleteCommandText = "DELETE"
 
 End Sub
 
 Private Sub Class_Terminate()
 
 End Sub
 
 Public Property Let Columntype(Value)
 strType = lcase(Value)
 End Property
 
 Public Property Get Columntype()
 ColumnType = strType
 End Property
 
 Public Property Let Para(Value)
 Para = Value
 End Property
 
 
 Public Property Let ParaLink(Value)
 ParaLink  = Replace(Value,"{0}",Para)
 End Property
 
 Public Property Let ControlName(Value)
 ControlName = Value
 End Property
 
 Public Property Let Style(Value)
 strStyle = Value
 End Property
 
 Public Property Let Eventstr(Value)
 strEvent = Value
 End Property
 
 Public Property Let Align(Value)
 strAlign = Value
 End Property
 
 Public Property Get Align()
 Align = strAlign
 End Property
 
 Public Property Get Eventstr()
 Eventstr = strEvent
 End Property
 
 Public Property Let Width(Value)
 intWidth = Value
 End Property
 
 Public Property Let Field(Value)
 strField = lcase(Value)
 End Property
 
 Public Property Get Field()
 Field = strField
 End Property
 
 Public Property Let Title(Value)
 if value="" then strTitle = strField else strTitle = Value
 End Property
 
 Public Property Get Title()
 if strTitle="" then Title = strField else Title  = strTitle
 End Property
 
 Public Property Let CssClass(Value)
 strCssClass = Value
 End Property
 
 Public Property Get CssClass()
 CssClass = strCssClass
 End Property
 
 Public Property Let DataType(Value)
 strDataType = lcase(Value)
 End Property
 
 Public Property Get DataType()
 DataType = strDataType
 End Property
 
 Public Property Let Text(Value)
 select case value
 case ""
 strText = strType
 case null
 strText = strType
 case else
 strText = Value
 end select
 End Property
 
 Public Property Get Text()
 Text = strText
 End Property
 
 Public Property Let ReadOnly(Value)
 if value="" or isnull(value) then strReadOnly = False else strReadOnly = value
 End Property
 
 Public Property Get ReadOnly()
 ReadOnly = strReadOnly
 End Property
 
 Public Property Let EditCommandText(Value)
 strEditCommandText = Value
 End Property
 
 Public Property Get EditCommandText()
 EditCommandText = strEditCommandText
 End Property
 
 
 Public Property Let UpdateCommandText(Value)
 strUpdateCommandText = Value
 End Property
 
 Public Property Get UpdateCommandText()
 UpdateCommandText = strUpdateCommandText
 End Property
 
 
 Public Property Let CancelCommandText(Value)
 strCancelCommandText = Value
 End Property
 
 Public Property Get CancelCommandText()
 CancelCommandText = strCancelCommandText
 End Property
 
 
 
 Public Property Let DeleteCommandText(Value)
 strDeleteCommandText = Value
 End Property
 
 Public Property Get DeleteCommandText()
 DeleteCommandText = strDeleteCommandText
 End Property
 
 Public Property Let RegExp(Value)
 strRegExp  = Value
 End Property
 
 Public Property Get RegExp()
 RegExp = strRegExp
 End Property
 
 Public Property Get HTMLstr()
 tempstr = ""
 if intWidth <> "" then tempstr = tempstr & " width=""" & intWidth & """"
 if intHeight <> "" then tempstr = tempstr & " height =""" & intHeight & """"
 if strStyle <> "" then tempstr = tempstr & " style=""" & strStyle & """"
 if strEvent <> "" then tempstr = tempstr & " " & strEvent
 if strAlign <> "" then tempstr = tempstr & " align=""" & strAlign & """"
 HTMLstr = tempstr
 
 End Property
 End Class
 %>
 |