一个操作datagrid绑定xml文件的例子程序

news/2024/7/5 16:36:51 标签: datagrid, xml, asp, dataset, server, textbox

原作:不详

完善:大鼹鼠

再完善:塞北的雪

但是现在还不能对一个没有记录的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> 


http://www.niftyadmin.cn/n/658712.html

相关文章

[Code+#3] 寻找车位

Description 给定一个大小为 \(n\times m\) 的 \(01\) 矩阵。 要求支持&#xff1a;单点翻转&#xff0c;询问子矩形内部最大正方形。 \(n\times m\leq 4\cdot 10^6,n\leq m,q\leq 2000\)。 Sol 线段树神题。 我们来一步步解决问题。 首先考虑询问整个矩形&#xff0c;且只有一…

输入、输出流

java.io包(I/O流库)中提供大量的流类 所有输入流都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类 所有输出流都是抽象类OutputStream(字节输出流)或抽象类Writer(字符输出流)的子类 File类&#xff1a; //File类对象主要用来获取文件本身的一些信息&#x…

数据库的各种连接

ODBC链接适合数据库类型 链接方式 access "Driver{microsoft access driver(*.mdb)};dbq*.mdb;uidadmin;pwdpass;" dBase "Driver{microsoft dbase driver(*.dbf)};driverid277;dbq------------;" Oracle "Driver{microsoft odbc for oracle};servero…

[CF1045B]Space Isaac

题目&#xff1a;Space Isaac 传送门&#xff1a;http://codeforces.com/contest/1045/problem/B 分析&#xff1a; 1&#xff09;我们考虑不能被表示出来的数。 2&#xff09;设这个数为P&#xff0c;对所有的数x,如果$x \in A$&#xff0c;在那么$(p-x)mod m \in A $;如果$x …

Python曲线拟合(polyfit , curve_fit, interp1d插值)

文章目录np.polyfit 多项式拟合例1例2curve_fit () 自定义函数拟合scipy.interpolate.interpnd 插值拟合Referencesnp.polyfit 多项式拟合 在python中&#xff0c;Numpy.polyfit()是一个在多项式函数内拟合数据的方法。当最小二乘法的拟合条件很差时&#xff0c;polyfit会发出…

计算机中信息的表示及存储形式

计算机内部均采用二进制来表示各种信息。 一、数的位置计数法及进制的概念 ① 数制只采用R个基本符号——基R数制&#xff0c;R称为数制的“基数”。 ② 数制中每一位&#xff08;e.g.十进制的个十百千位等&#xff09;对应的单位称为“权”&#xff0c;权即以R为底的幂。 ③ 每…

asp下用OracleInProcServer完成对Oracle的连接和操作

< % Response.CharSet"gb2312" tblnamerequest("tb")Dim objOraSession,objOraDb Dim strDbUser,strDbPwd,strDbConn Call ConnectDB() Sub ConnectDB() 连接数据库 On Error Resume Next strDbUser "liujincai" 连接用户名 strDbPwd…

动画优化、客户端存储、历史记录、worker

一、requestAnimationFrame 1、requestAnimationFrame怎么用&#xff1f; 设置关键帧动画效果&#xff0c;注重关键帧执行的情况&#xff0c;用法与setTimeout一样 2、requestAnimationFrame与setTimeout的区别&#xff1f; &#xff08;执行时间&#xff0c;setTimeout是用户…