

转自http://boiling1980.blog.hexun.com/6008344_d.html
//EditXml.aspx
<%@ Page Language="C#" Theme="Admin" AutoEventWireup="true" CodeFile="EditXml.aspx.cs" Inherits="EditXml" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>ConfigEdit</title>
<style>
<!--
BODY {
PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
DIV {
PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
UL {
PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
FORM {
PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
BODY {
MARGIN-TOP: 7px; BACKGROUND-COLOR: #fff
}
BODY {
FONT-SIZE: 12px; MARGIN-LEFT: auto; LINE-HEIGHT: 19px; MARGIN-RIGHT: auto; FONT-FAMILY: 宋体; TEXT-ALIGN: center
}
LI {
PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
P {
PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
DIV {
FONT-SIZE: 12px; MARGIN-LEFT: auto; LINE-HEIGHT: 19px; MARGIN-RIGHT: auto; FONT-FAMILY: 宋体;
}
IMG {
BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px
}
INPUT {
BORDER-RIGHT: #a3bfa8 1px solid; BORDER-TOP: #a3bfa8 1px solid; BORDER-LEFT: #a3bfa8 1px solid; BORDER-BOTTOM: #a3bfa8 1px solid; BACKGROUND-COLOR: #fff;
}
textarea
{
BORDER-RIGHT: #a3bfa8 1px solid; BORDER-TOP: #a3bfa8 1px solid; BORDER-LEFT: #a3bfa8 1px solid; BORDER-BOTTOM: #a3bfa8 1px solid; BACKGROUND-COLOR: #fff;
}
UL {
CLEAR: both
}
LI {
CLEAR: both
}
PANEL
{
border-right: #b3dfbb 1px solid;
border-top: #b3dfbb 1px solid;
border-left: #b3dfbb 1px solid;
border-bottom: #b3dfbb 1px solid;
}
SELECT {
BORDER-RIGHT: #a3bfa8 1px solid; BORDER-TOP: #a3bfa8 1px solid; BORDER-LEFT: #a3bfa8 1px solid; BORDER-BOTTOM: #a3bfa8 1px solid; BACKGROUND-COLOR: #fff;
}
.clear {
CLEAR: both
}
.main {
BORDER-RIGHT: #b3dfbb 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #b3dfbb 1px solid; MARGIN-TOP: 8px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: #b3dfbb 1px solid; WIDTH: 700px; PADDING-TOP: 0px; BORDER-BOTTOM: #b3dfbb 1px solid; HEIGHT: auto; BACKGROUND-COLOR: #fff
}
.main2 {
BORDER-RIGHT: #b3dfbb 1px solid; FONT-SIZE: 10pt; PADDING-RIGHT: 0px; BORDER-TOP: #b3dfbb 1px solid; MARGIN-TOP: 8px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: #b3dfbb 1px solid; WIDTH: 700px; PADDING-TOP: 0px; BORDER-BOTTOM: #b3dfbb 1px solid; HEIGHT: auto; BACKGROUND-COLOR: #fff
}
.main_title_green {
BACKGROUND: #e9f6e5; LINE-HEIGHT: 25px; BORDER-BOTTOM: #b3dfbb 1px solid; HEIGHT: 25px; TEXT-ALIGN: left
}
.green_title {
PADDING-LEFT: 25px; FLOAT: left
}
.button_next {
BORDER-RIGHT: #78c57e 1px solid; BORDER-TOP: #78c57e 1px solid; FONT-WEIGHT: bold; BACKGROUND: url() #ddf1d0 repeat-x; BORDER-LEFT: #78c57e 1px solid; WIDTH: 70px; CURSOR: hand; COLOR: #007f00; PADDING-TOP: 3px; BORDER-BOTTOM: #78c57e 1px solid
}
.label_Section{
PADDING-LEFT: 25px; FONT-WEIGHT: bold; FONT-SIZE: 14px; COLOR: #007f00; float:left; text-align:left;
}
.label_Key {
CLEAR: both; PADDING-LEFT: 10px; MARGIN: 0px; text-align:left;
}
-->
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<center>
<DIV class="main clear">
<DIV class=main_title_green>
<DIV class=green_title><IMG class=arrow height=11 src="../../Images/admin/arrow.gif" width=6>
<SPAN class=title_font_green1>系统配置:</SPAN></DIV>
</DIV>
<br/>
<p>
<asp:PlaceHolder ID="PlaceHolderPanel" runat="server"></asp:PlaceHolder>
</p>
<P style="text-align:center;">
<br/>
<asp:Button ID="btnSave" runat="server" CssClass="button_next" Text=" 提 交 " OnClick="btnSave_Click" />
</P>
<br/>
</DIV>
</center>
</div>
</form>
</body>
</html>
//EditXml.aspx.cs
using System;
using System.Text;
using System.Data;
using System.Configuration;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Collections.Generic;
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 Infragistics.WebUI.UltraWebNavigator;
using System.Collections.Specialized;
using System.Xml;
public partial class EditXml : Page
{
#region 私有变量
private string xmlPath = System.Web.HttpContext.Current.Server.MapPath(@"~/Game.xml");
private TextBox textBoxList = null;
#endregion
#region 页面初始化
protected void Page_Load(object sender, EventArgs e)
{
//读取数据
ReadDataToPanel();
}
#endregion
#region 私有函数
/// <summary>
/// 读取xml中数据并生成控件
/// </summary>
public void ReadDataToPanel()
{
StringBuilder tableCode = null;
tableCode = new StringBuilder();
DataSet ds = new DataSet();
ds.ReadXml(xmlPath);
DataTable dtSession = ds.Tables[0];
DataTable dtKey = ds.Tables[1];
int i = 0;
foreach (DataRow rowS in dtSession.Rows)
{
string panelId = rowS["Name"].ToString();
string width = "660px";
string toolTip = "SECTION: " + rowS["Name"].ToString();
string headerText = "SECTION: " + rowS["Name"].ToString();
Label myLabel = new Label();
myLabel.Text = "SectionName: " + rowS["Name"].ToString();
myLabel.ID = "Label" + rowS["Name"].ToString();
myLabel.Width = 200;
myLabel.CssClass = "label_Section";
PlaceHolderPanel.Controls.Add(myLabel);
PlaceHolderPanel.Controls.Add(new LiteralControl("<br/>"));
//
foreach (DataRow rowK in dtKey.Rows)
{
if (rowK[2].ToString() == rowS[0].ToString())
{
i++;
string controlValue = rowK["Value"].ToString();
string controlId = rowS["Name"].ToString() + "." + rowK["Name"].ToString();
int id = i;
CreateControl(controlValue, controlId, id);
}
}
PlaceHolderPanel.Controls.Add(new LiteralControl("<br/><br/><br/>"));
}
}
/// <summary>
/// 动态创建控件
/// </summary>
public void CreateControl(string controlValue,string conngrolId,int id)
{
if (ViewState["Created"+id] == null)
{
PlaceHolderPanel.Controls.Add(new LiteralControl("<br>"));
//添加Lable
Label myLabel = new Label();
myLabel.Text = conngrolId.Substring(conngrolId.IndexOf('.') + 1)+": ";
myLabel.ID = "Label" + id.ToString();
myLabel.Width = 120;
myLabel.CssClass = "label_Key";
PlaceHolderPanel.Controls.Add(myLabel);
//添加TextBox
textBoxList = new TextBox();
textBoxList.ID = conngrolId;
textBoxList.Text = controlValue;
textBoxList.Width = 366;
PlaceHolderPanel.Controls.Add(textBoxList);
}
}
/// <summary>
/// 保存编辑结果
/// </summary>
public void SaveDataToFile()
{
SortedList<string,SortedList<string,string>> section = new SortedList<string,SortedList<string,string>>();
SortedList<string,string> keyList;
DataSet ds = new DataSet();
ds.ReadXml(xmlPath);
DataTable dtSession = ds.Tables[0];
DataTable dtKey = ds.Tables[1];
NameValueCollection requestCollection = Request.Form;
foreach (DataRow rowS in dtSession.Rows)
{
string sectionName = rowS["Name"].ToString();
keyList = new SortedList<string, string>();
foreach (DataRow rowK in dtKey.Rows)
{
string keyName = string.Empty;
string keyValue = string.Empty;
if (rowK[2].ToString() == rowS[0].ToString())
{
keyName = rowS["Name"].ToString() + "." + rowK["Name"].ToString();
foreach (string key in requestCollection.AllKeys)
{
if(keyName==key)
{
keyValue = requestCollection[key];
keyList.Add(rowK["Name"].ToString().Trim(), keyValue);
}
}
}
}
section.Add(sectionName,keyList);
}
Configurations.SetConfiguration(section);
Alert("保存配置文件成功!");
}
/// <summary>
/// 保存编辑结果
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnSave_Click(object sender, EventArgs e)
{
SaveDataToFile();
}
#endregion
}
//Game.xml
<?xml version="1.0" encoding="gb2312"?>
<Game>
<Section Name="RedAlarm">
<Key Name="CreateDate" Value="1995" />
<Key Name="Company" Value="SONY" />
</Section>
<Section Name="Empire">
<Key Name="CreateDate" Value="2000" />
<Key Name="Company" Value="PlayGang" />
</Section>
<Section Name="Pushbutton">
<Key Name="CreateDate" Value="2006" />
<Key Name="Company" Value="XMan" />
</Section>
</Game>