原作:不详
完善:大鼹鼠
再完善:塞北的雪
但是现在还不能对一个没有记录的xml进行操作。但是会提示空。
另外做完一个删除操作后,如果刷新也会出错,因为我对vb.net不是很熟,所以改的不知道怎么样?
<%@page language="vb" runat="server" responseencoding="utf-8"%>
<%@ import namespace="system.data" %>
<%@ import namespace="system.io" %>
<%@ import namespace="system.xml" %>
<script language="vb" runat="server" >
原来responseencoding=gb2312 然而通过更新操作的汉字就会将乱码保存到xml文件中
改成responseencoding=utf-8 就没有问题了。
sub page_load(sender as object,e as eventargs)
if not page.ispostback then
eventdate.datasource = loadmyconfigdata
if intrecordcount> 0 then
eventdate.databind()
else
response.write("这是一个空xml文件")
response.end()
end if
end if
end sub
private intrecordcount as integer
protected function loadmyconfigdata() as dataset
dim sourcexml as string = server.mappath("lzdata.xml")
if (not file.exists(sourcexml)) then
return nothing
end if
dim doc as new xmldocument()
doc.load(sourcexml)
intrecordcount=doc.selectnodes("//groups").count
dim cacheddataset as dataset = session("myconfigdata1")
if (not cacheddataset is nothing) then
return cacheddataset
end if
dim dataset as dataset = new dataset()
try
dataset.readxml(sourcexml)
session("myconfigdata1")=dataset
catch e as exception
errormessage.text = e.message
dataset=nothing
end try
return dataset
end function
sub dedr_edit(sender as object,e as datagridcommandeventargs)
eventdate.edititemindex = cint(e.item.itemindex)
eventdate.datasource = loadmyconfigdata
eventdate.databind()
end sub
sub dedr_update(sender as object,e as datagridcommandeventargs)
dim dataset as dataset = loadmyconfigdata
dim p1 as integer=eventdate.currentpageindex 获得页数 (页数是从0开始的)
dim row1 as integer = cint(e.item.itemindex) 获得发生事件的行数 (从0开始的)
dim row as integer
dim edittext as textbox
row = p1* eventdate.pagesize +row1
edittext=e.item.findcontrol("txttitle") 获得数据采集文本框
dataset.tables(0).rows(row).item("title") = trim(edittext.text)
edittext=e.item.findcontrol("txtfolder")
dataset.tables(0).rows(row).item("folder") = trim(edittext.text)
edittext=e.item.findcontrol("txtfolderimg")
dataset.tables(0).rows(row).item("folderimg") = trim(edittext.text)
edittext=e.item.findcontrol("txtname")
dataset.tables(0).rows(row).item("name") = edittext.text
dataset.writexml(server.mappath("lzdata.xml"))
session("myconfigdata1")=nothing
eventdate.edititemindex= -1
eventdate.datasource = loadmyconfigdata
eventdate.databind()
end sub
sub dedr_cancel(sender as object,e as datagridcommandeventargs)
eventdate.edititemindex= -1
session("myconfigdata1")=nothing
eventdate.datasource = loadmyconfigdata
eventdate.databind()
end sub
sub dedr_delete(sender as object,e as datagridcommandeventargs)
dim dataset as dataset = loadmyconfigdata
dim row1 as integer = cint(e.item.itemindex)
dim p1 as integer=eventdate.currentpageindex
dim row as integer
if (intrecordcount mod eventdate.pagesize)=1 and row1=0 then
response.write ("<script>alert(每页只剩一个记录时不能删除,请到上一页删除,或在该页添加一个新记录再删除!)</" & "script>")
row = p1* eventdate.pagesize +row1
dataset.tables(0).rows(row).delete
dataset.writexml(server.mappath("lzdata.xml"))
session("myconfigdata1")=nothing
eventdate.edititemindex= -1
if eventdate.currentpageindex>0 then
eventdate.currentpageindex=eventdate.currentpageindex-1
eventdate.datasource = loadmyconfigdata
eventdate.databind()
else
response.write("xml已经被删空了")
response.end()
end if
else
row = p1* eventdate.pagesize +row1
dataset.tables(0).rows(row).delete
dataset.writexml(server.mappath("lzdata.xml"))
session("myconfigdata1")=nothing
eventdate.edititemindex= -1
eventdate.datasource = loadmyconfigdata
eventdate.databind()
end if
end sub
sub dedr_add(sender as object,e as eventargs)
dim dataset as dataset = loadmyconfigdata
dim newrow as datarow 建立一个新行
newrow=dataset.tables(0).newrow()
newrow.item("eventdate")=now() "15/07/2001"
newrow.item("title")="讨论和解决"
newrow.item("folder")="group"
newrow.item("folderimg")="images/bigmolefolder.gif "
newrow.item("name")="技术"
dataset.tables(0).rows.add(newrow) 将行添加到当前的dataset中
dataset.writexml(server.mappath("lzdata.xml")) 将dataset写到xml文件中
session("myconfigdata1")=nothing
eventdate.datasource = loadmyconfigdata
eventdate.databind()
每次都至多有一行被置为编辑行,编辑行显示的就是列中的 edititemtemplate
dim ps as integer=intrecordcount 记录数
eventdate.currentpageindex=math.ceiling(ps/eventdate.pagesize)-1 设定当前显示最后一页
dim tmpint as integer=ps-math.floor(ps/eventdate.pagesize)*eventdate.pagesize
if tmpint=0 then tmpint=eventdate.pagesize
eventdate.edititemindex= tmpint – 1 设置显示edititemtemplate的行号
eventdate.datasource = loadmyconfigdata
eventdate.databind()
end sub
翻页时
sub dedr_changed(sender as object,e as datagridpagechangedeventargs)
eventdate.edititemindex=-1
eventdate.currentpageindex = e.newpageindex
eventdate.datasource = session("myconfigdata1")
eventdate.databind()
end sub
</script>
<html>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<body>
<% 下面的列设置中,每一个 templatecolumn中都有 itemtemplate 和 edititemtemplate两种 可以
通过代码控制显示哪一种 %>
<form runat="server">
<asp:label id="errormessage" runat="server"/><br/>
<asp:linkbutton onclick="dedr_add" text="添加新记录" runat="server"/><br/>
<asp:datagrid id="eventdate"
autogeneratecolumns="false" width="100%" runat="server"
allowpaging="true"
pagesize="15"
pagerstyle-mode="numericpages"
pagerstyle-horizontalalign="right"
pagerstyle-prevpagetext="前页"
pagerstyle-nextpagetext="后页"
onpageindexchanged="dedr_changed"
oneditcommand="dedr_edit"
onupdatecommand="dedr_update"
oncancelcommand="dedr_cancel"
ondeletecommand="dedr_delete">
<headerstyle forecolor="white" backcolor="dodgerblue"
font-bold="true"/>
<itemstyle backcolor="white"/>
<alternatingitemstyle backcolor="gainsboro"/>
<columns>
<asp:templatecolumn headertext="栏目描述">
<itemtemplate>
<%# container.dataitem("title")%>
</itemtemplate>
<edititemtemplate>
<asp:textbox id="txttitle" size="25"
text=<%# container.dataitem("title")%>
runat="server"/>
</edititemtemplate>
</asp:templatecolumn>
<asp:templatecolumn headertext="栏目文件目录">
<itemtemplate>
<%# container.dataitem("folder")%>
</itemtemplate>
<edititemtemplate>
<asp:textbox id="txtfolder" size="14"
text=<%# container.dataitem("folder")%>
runat="server"/>
</edititemtemplate>
</asp:templatecolumn>
<asp:templatecolumn headertext="栏目图标">
<itemtemplate>
<%# container.dataitem("folderimg")%>
</itemtemplate>
<edititemtemplate>
<asp:textbox id="txtfolderimg" size="24"
text=<%# container.dataitem("folderimg")%>
runat="server"/>
</edititemtemplate>
</asp:templatecolumn>
<asp:templatecolumn headertext="栏目名称">
<itemtemplate>
<%# container.dataitem("name")%>
</itemtemplate>
<edititemtemplate>
<asp:textbox id="txtname" size="15"
text=<%# container.dataitem("name")%>
runat="server"/>
</edititemtemplate>
</asp:templatecolumn>
<asp:templatecolumn headertext="操作">
<itemtemplate>
<asp:linkbutton commandname="edit" text="编辑"
runat="server"/>
<asp:linkbutton commandname="delete" text="删除"
runat="server"/>
</itemtemplate>
<edititemtemplate>
<asp:linkbutton commandname="cancel" text="取消"
runat="server"/>
<asp:linkbutton commandname="update" text="更新"
runat="server"/>
</edititemtemplate>
</asp:templatecolumn>
</columns>
</asp:datagrid>
</form>
<!–
列中的 几个linkbutton 的 commandname 可以取 edit,delete,cancel,update 这个名字不能乱取
他和datagrid的 oneditcommand onupdatecommand ondeletecommand oncancelcommand 是相对应的
–>
</body>
