ASP模仿asp.net的DataGrid
2005-05-20 10:31:34 来源:WEB开发网自动生成表格,自动完成删除,编辑、填加、分页功能,自定义样式表头样式
代码用两个类来实现
一开始考虑得太多,功能想得太强大,通用性越强,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 column
b3.Field = "lastname"
b3.Title = "名"
a.AddColumn(b3)
set b4 = new column
b4.Field = "logintimes"
b4.Title = "登陆次数"
b4.ReadOnly = true '设为只读,不会出现在编辑框中和新增记录中
a.AddColumn(b4)
set b5 = new column
b5.Title="编辑"
b5.Columntype ="edit" '编辑列
b5.EditCommandText = "编辑" '编辑按钮文本
a.AddColumn(b5)
set b6 = new column
b6.align = "center"
b6.Width = 200
b6.Columntype = "delete"
b6.DeleteCommandText = "删除按钮"
b6.Title ="删除"
a.AddColumn(b6)
a.CreateGrid()
set b1 = nothing
set b2 = nothing
set b3 = nothing
set b4 = nothing
set b5 = nothing
set b6 = nothing
类文件如下:
<%Class DataGrid
Private 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 Column
Private 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
%>
赞助商链接