Repeater、GridView等 操作XML文件
在项目中需要对XML文件进行管理,我用了Repeater 的方式来实现了实时的更新
希望对阅读这篇随笔的您有所帮助,我用的Repeater,您也可以用GridView等...区别仅仅在于控件内的按钮的事件中获取当前操作对象索引的方式..
如果您的XML文档格式与此不同,建议使用下面的XML格式(因为这个格式能够通过DataSet的LoadXML方法直接获得数据源,并且能够使用DateSet的WriteXML方法输出XML文档)或者您可以根基自己的格式重新写ReadXmlInfo和WriteXMLInfo这两个方法。
首先是我的XML格式
XML格式
<?xml version="1.0" standalone="yes"?>
<imgs>
<pic name="/adv_pic/1.jpg" url="http://www.baidu.com/" title="美国影视中的黑人总统盘点" />
<pic name="/adv_pic/2.jpg" url="http://www.baidu.com/" title="斯琴格日乐--我很好!" />
<pic name="/adv_pic/3.jpg" url="http://www.baidu.com/" title="伦敦金融城市长秀" />
<pic name="/adv_pic/4.jpg" url="http://www.baidu.com/" title="市长大人的金色大马车" />
<pic name="/adv_pic/5.jpg" url="http://www.baidu.com/" title="英国皇家歌剧院艺术家为公益缘何全裸?" />
</imgs>
<?xml version="1.0" standalone="yes"?>
<imgs>
<pic name="/adv_pic/1.jpg" url="http://www.baidu.com/" title="美国影视中的黑人总统盘点" />
<pic name="/adv_pic/2.jpg" url="http://www.baidu.com/" title="斯琴格日乐--我很好!" />
<pic name="/adv_pic/3.jpg" url="http://www.baidu.com/" title="伦敦金融城市长秀" />
<pic name="/adv_pic/4.jpg" url="http://www.baidu.com/" title="市长大人的金色大马车" />
<pic name="/adv_pic/5.jpg" url="http://www.baidu.com/" title="英国皇家歌剧院艺术家为公益缘何全裸?" />
</imgs>
HTML CODE
Code
<%@ Register Assembly="Anthem" Namespace="Anthem" TagPrefix="anthem" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>flash橱窗管理</title>
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<link href="../css/css.css" type="text/css" rel="stylesheet">
</head>
<body>
<form id="form1" runat="server">
<div style="text-align:center;">
<anthem:Repeater ID="Repeater1" runat="server" AutoUpdateAfterCallBack="true">
<HeaderTemplate>
<table class="DataList" cellspacing="0" rules="all" border="1" id="Datagrid2" style="width: 100%;
border-collapse: separate;">
<tr class="DataList_Head" align="Left">
<td align="center" style="width: 2%;">
编号</td>
<td align="center" style="width: 30%;">
标题</td>
<td align="center" style="width: 30%;">
地址</td>
<td align="center" style="width: 30%;">
图片</td>
<td align="center" style="width: 8%;">
操作</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr class="DataList_Item" align="Left">
<td align="center" style="width: 2%;">
<%#Container.ItemIndex%></td>
<td align="center" style="width: 30%;">
<a href='<%# DataBinder.Eval(Container.DataItem,"url")%>'
target="_blank"><%# DataBinder.Eval(Container.DataItem,"title")%></a>
</td>
<td align="center" style="width: 30%;">
<a href='<%# DataBinder.Eval(Container.DataItem,"url")%>'
target="_blank">
<%#DataBinder.Eval(Container.DataItem, "url").ToString()%></a>
</td>
<td align="center" style="width: 30%;">
<a href='<%# DataBinder.Eval(Container.DataItem,"name")%>'
target="_blank"><%# DataBinder.Eval(Container.DataItem,"name")%></a>
</td>
<td align="center" style="width: 10%;">
<anthem:LinkButton Text="修改" ID="btn_Edit" OnClick="btn_Edit_Click" runat="server" ToolTip='<%#Container.ItemIndex%>'></anthem:LinkButton>
<anthem:LinkButton Text="删除" ID="btn_Delete" OnClick="btn_Delete_Click" PreCallBackFunction="function (){return confirm('确定删除?');}" runat="server" ToolTip='<%#Container.ItemIndex%>'></anthem:LinkButton>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</anthem:Repeater>
<table width="90%" cellpadding="5" bgcolor="#e7ecce" border="1">
<tr>
<td align="center" colspan="2">
<anthem:Label ID="Txt_TableTitle" runat="server" AutoUpdateAfterCallBack="true" Text="添加新项"></anthem:Label>
<anthem:HiddenField ID="Txt_ItemIndex" runat="server" AutoUpdateAfterCallBack="true" />
</td>
</tr>
<tr>
<td align="right">
标题:
</td>
<td align="left">
<anthem:TextBox ID="Txt_title" runat="server" AutoUpdateAfterCallBack="true" Width="301px"></anthem:TextBox></td>
</tr>
<tr>
<td align="right">
地址:</td>
<td align="left">
<anthem:TextBox ID="Txt_url" runat="server" AutoUpdateAfterCallBack="true" Width="301px"></anthem:TextBox></td>
</tr>
<tr>
<td align="right">
图片地址</td>
<td align="left">
<anthem:TextBox ID="Txt_name" runat="server" Width="303px" AutoUpdateAfterCallBack="true"></anthem:TextBox></td>
</tr>
<tr>
<td align="center" colspan="2">
<anthem:Button ID="Btn_Submit" runat="server" Text=" 确 定 " CssClass="button" OnClick="Btn_Submit_Click" AutoUpdateAfterCallBack="true" />
<anthem:Button ID="BtnBack" runat="server" Text=" 取 消 " CssClass="button" OnClick="BtnBack_Click" /></td>
</tr>
</table>
</div>
</form>
</body>
</html>
<%@ Register Assembly="Anthem" Namespace="Anthem" TagPrefix="anthem" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>flash橱窗管理</title>
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<link href="../css/css.css" type="text/css" rel="stylesheet">
</head>
<body>
<form id="form1" runat="server">
<div style="text-align:center;">
<anthem:Repeater ID="Repeater1" runat="server" AutoUpdateAfterCallBack="true">
<HeaderTemplate>
<table class="DataList" cellspacing="0" rules="all" border="1" id="Datagrid2" style="width: 100%;
border-collapse: separate;">
<tr class="DataList_Head" align="Left">
<td align="center" style="width: 2%;">
编号</td>
<td align="center" style="width: 30%;">
标题</td>
<td align="center" style="width: 30%;">
地址</td>
<td align="center" style="width: 30%;">
图片</td>
<td align="center" style="width: 8%;">
操作</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr class="DataList_Item" align="Left">
<td align="center" style="width: 2%;">
<%#Container.ItemIndex%></td>
<td align="center" style="width: 30%;">
<a href='<%# DataBinder.Eval(Container.DataItem,"url")%>'
target="_blank"><%# DataBinder.Eval(Container.DataItem,"title")%></a>
</td>
<td align="center" style="width: 30%;">
<a href='<%# DataBinder.Eval(Container.DataItem,"url")%>'
target="_blank">
<%#DataBinder.Eval(Container.DataItem, "url").ToString()%></a>
</td>
<td align="center" style="width: 30%;">
<a href='<%# DataBinder.Eval(Container.DataItem,"name")%>'
target="_blank"><%# DataBinder.Eval(Container.DataItem,"name")%></a>
</td>
<td align="center" style="width: 10%;">
<anthem:LinkButton Text="修改" ID="btn_Edit" OnClick="btn_Edit_Click" runat="server" ToolTip='<%#Container.ItemIndex%>'></anthem:LinkButton>
<anthem:LinkButton Text="删除" ID="btn_Delete" OnClick="btn_Delete_Click" PreCallBackFunction="function (){return confirm('确定删除?');}" runat="server" ToolTip='<%#Container.ItemIndex%>'></anthem:LinkButton>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</anthem:Repeater>
<table width="90%" cellpadding="5" bgcolor="#e7ecce" border="1">
<tr>
<td align="center" colspan="2">
<anthem:Label ID="Txt_TableTitle" runat="server" AutoUpdateAfterCallBack="true" Text="添加新项"></anthem:Label>
<anthem:HiddenField ID="Txt_ItemIndex" runat="server" AutoUpdateAfterCallBack="true" />
</td>
</tr>
<tr>
<td align="right">
标题:
</td>
<td align="left">
<anthem:TextBox ID="Txt_title" runat="server" AutoUpdateAfterCallBack="true" Width="301px"></anthem:TextBox></td>
</tr>
<tr>
<td align="right">
地址:</td>
<td align="left">
<anthem:TextBox ID="Txt_url" runat="server" AutoUpdateAfterCallBack="true" Width="301px"></anthem:TextBox></td>
</tr>
<tr>
<td align="right">
图片地址</td>
<td align="left">
<anthem:TextBox ID="Txt_name" runat="server" Width="303px" AutoUpdateAfterCallBack="true"></anthem:TextBox></td>
</tr>
<tr>
<td align="center" colspan="2">
<anthem:Button ID="Btn_Submit" runat="server" Text=" 确 定 " CssClass="button" OnClick="Btn_Submit_Click" AutoUpdateAfterCallBack="true" />
<anthem:Button ID="BtnBack" runat="server" Text=" 取 消 " CssClass="button" OnClick="BtnBack_Click" /></td>
</tr>
</table>
</div>
</form>
</body>
</html>
然后贴C# code
使用的是Anthem控件,不使用Anthem控件的朋友可以使用常规控件,不影响效果
C# 的Code
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.IO;
namespace test
{
public partial class shopWindowMar : System.Web.UI.Page
{
private static string ImgUrl = "/adv_pic";
private static string XmlUrl = "/xml/TheXml.xml";
private static DataSet ds = new DataSet();
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ReadXmlInfo();//读取XML文件并绑定到Repeater
}
}
//读取XML文件并绑定到Repeater
public void ReadXmlInfo()
{
ds.Tables.Clear();
ds.ReadXml(Server.MapPath(XmlUrl));
Repeater1.DataSource = ds.Tables[0].DefaultView;
Repeater1.DataBind();
}
//从ds数据源重写XML文件
public void WriteXMLInfo()
{
ds.WriteXml(Server.MapPath(XmlUrl));
}
//删除某节点
protected void btn_Delete_Click(object sender, EventArgs e)
{
Anthem.LinkButton aButton = sender as Anthem.LinkButton;
ds.Tables[0].Rows.RemoveAt(int.Parse(aButton.ToolTip.ToString()));
WriteXMLInfo();
ReadXmlInfo();
}
//修改某节点,初始化修改表单数据
protected void btn_Edit_Click(object sender, EventArgs e)
{
Anthem.LinkButton aButton = sender as Anthem.LinkButton;
int ItemIndex = int.Parse(aButton.ToolTip.ToString());
Txt_TableTitle.Text = "修改现有第" + ItemIndex.ToString() + "个项目";
Btn_Submit.Text = " 修 改 ";
Txt_title.Text = ds.Tables[0].Rows[ItemIndex]["title"].ToString();
Txt_name.Text = ds.Tables[0].Rows[ItemIndex]["name"].ToString();
Txt_url.Text = ds.Tables[0].Rows[ItemIndex]["url"].ToString();
Txt_ItemIndex.Value = ItemIndex.ToString();
}
//提交表单内容,进行新增或修改
protected void Btn_Submit_Click(object sender, EventArgs e)
{
if (Txt_ItemIndex.Value.ToString() != "")
{
int EditIndex = int.Parse(Txt_ItemIndex.Value.ToString());
ds.Tables[0].Rows[EditIndex]["name"] = Txt_name.Text.ToString();
ds.Tables[0].Rows[EditIndex]["title"] = Txt_title.Text.ToString();
ds.Tables[0].Rows[EditIndex]["url"] = Txt_url.Text.ToString();
}
else
{
DataRow dr = ds.Tables[0].NewRow();
dr["name"] = Txt_name.Text.ToString();
dr["title"] = Txt_title.Text.ToString();
dr["url"] = Txt_url.Text.ToString();
ds.Tables[0].Rows.Add(dr);
}
WriteXMLInfo();
ReadXmlInfo();
initTxtTable();
}
//取消修改按钮事件
protected void BtnBack_Click(object sender, EventArgs e)
{
initTxtTable();
}
//重置表单内容
public void initTxtTable()
{
Txt_url.Text = "";
Txt_title.Text = "";
Txt_name.Text = "";
Txt_ItemIndex.Value = "";
Txt_TableTitle.Text = "添加新项";
Btn_Submit.Text = " 添 加 ";
}
}
}
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.IO;
namespace test
{
public partial class shopWindowMar : System.Web.UI.Page
{
private static string ImgUrl = "/adv_pic";
private static string XmlUrl = "/xml/TheXml.xml";
private static DataSet ds = new DataSet();
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ReadXmlInfo();//读取XML文件并绑定到Repeater
}
}
//读取XML文件并绑定到Repeater
public void ReadXmlInfo()
{
ds.Tables.Clear();
ds.ReadXml(Server.MapPath(XmlUrl));
Repeater1.DataSource = ds.Tables[0].DefaultView;
Repeater1.DataBind();
}
//从ds数据源重写XML文件
public void WriteXMLInfo()
{
ds.WriteXml(Server.MapPath(XmlUrl));
}
//删除某节点
protected void btn_Delete_Click(object sender, EventArgs e)
{
Anthem.LinkButton aButton = sender as Anthem.LinkButton;
ds.Tables[0].Rows.RemoveAt(int.Parse(aButton.ToolTip.ToString()));
WriteXMLInfo();
ReadXmlInfo();
}
//修改某节点,初始化修改表单数据
protected void btn_Edit_Click(object sender, EventArgs e)
{
Anthem.LinkButton aButton = sender as Anthem.LinkButton;
int ItemIndex = int.Parse(aButton.ToolTip.ToString());
Txt_TableTitle.Text = "修改现有第" + ItemIndex.ToString() + "个项目";
Btn_Submit.Text = " 修 改 ";
Txt_title.Text = ds.Tables[0].Rows[ItemIndex]["title"].ToString();
Txt_name.Text = ds.Tables[0].Rows[ItemIndex]["name"].ToString();
Txt_url.Text = ds.Tables[0].Rows[ItemIndex]["url"].ToString();
Txt_ItemIndex.Value = ItemIndex.ToString();
}
//提交表单内容,进行新增或修改
protected void Btn_Submit_Click(object sender, EventArgs e)
{
if (Txt_ItemIndex.Value.ToString() != "")
{
int EditIndex = int.Parse(Txt_ItemIndex.Value.ToString());
ds.Tables[0].Rows[EditIndex]["name"] = Txt_name.Text.ToString();
ds.Tables[0].Rows[EditIndex]["title"] = Txt_title.Text.ToString();
ds.Tables[0].Rows[EditIndex]["url"] = Txt_url.Text.ToString();
}
else
{
DataRow dr = ds.Tables[0].NewRow();
dr["name"] = Txt_name.Text.ToString();
dr["title"] = Txt_title.Text.ToString();
dr["url"] = Txt_url.Text.ToString();
ds.Tables[0].Rows.Add(dr);
}
WriteXMLInfo();
ReadXmlInfo();
initTxtTable();
}
//取消修改按钮事件
protected void BtnBack_Click(object sender, EventArgs e)
{
initTxtTable();
}
//重置表单内容
public void initTxtTable()
{
Txt_url.Text = "";
Txt_title.Text = "";
Txt_name.Text = "";
Txt_ItemIndex.Value = "";
Txt_TableTitle.Text = "添加新项";
Btn_Submit.Text = " 添 加 ";
}
}
}