一、添加控件
一个ListBox保存appSettings节中的内容。控件的AutoPostBack属性要设置成True。
<asp:ListBox id="ListBox1" AutoPostBack="True" OnSelectedIndexChanged="SelectedIndexChanged" Height="184px" runat="server"/>
两个TextBox用来填写键名和键值。
<asp:TextBox id="txtKey" runat="server" />
<asp:TextBox id="txtValue" runat="server" />
三个Button分别是“保存”用于保存修改后的键值。“添加”添加新的键。“删除”删除不用的键。
<asp:Button id="cmd_modify" runat="server" Text="保存" OnClick="cmd_modify_Click"/>
<asp:Button id="cmd_Add" runat="server" Text="添加" OnClick="cmd_Add_Click"/>
<asp:Button id="cmd_Del" runat="server" Text="删除" OnClick="cmd_Del_Click"/>
二、添加函数
1. 读取现有配置。因为web.config为xml格式的文档。所以用一个XmlDocument对象把它读到内存。然后把appSettings节中的所有节放到一个XmlNodeList中。最后添加到ListBox。
void BindData(){
XmlDocument xd=new XmlDocument();
xd.Load(Server.MapPath("web.config")); //加载文件
XmlNodeList xnl=xd.SelectNodes("configuration/appSettings/add"); //选择小节。
ListBox1.Items.Clear();
foreach(XmlNode xn in xnl) //添加到ListBox
{
ListItem li=new ListItem();
li.Text=xn.Attributes["key"].Value;
li.Value=xn.Attributes["value"].Value;
ListBox1.Items.Add(li);
}
}
2.修改数据。当一个现有的配置项被选定时,两个TextBox会分别显示键名和键值。此时可以修改键值。
private void cmd_modify_Click(object sender, System.EventArgs e)
{
XmlDocument xd=new XmlDocument();
xd.Load(Server.MapPath("web.config"));
XmlNodeList xnl=xd.SelectNodes("configuration/appSettings/add");
foreach(XmlNode xn in xnl) //遍历所有键,修改相应的键。
{
if(xn.Attributes["key"].Value==txtKey.Text)
xn.Attributes["value"].Value=txtValue.Text;
}
xd.Save(Server.MapPath("web.config")); //将修改的结果存回文件。
txtKey.Text="";txtValue.Text="";
BindData();
}
3.添加键。直接在两个TextBox填入键名和键值可添加一个新的键。
private void cmd_Add_Click(object sender, System.EventArgs e)
{
XmlDocument xd=new XmlDocument();
xd.Load(Server.MapPath("web.config"));
XmlNode father=xd.SelectSingleNode("configuration/appSettings"); //此次选择的是父节点
XmlNode xn=father.FirstChild.Clone(); //创建一个新的字节点。
xn.Attributes["key"].Value=txtKey.Text;
xn.Attributes["value"].Value=txtValue.Text;
father.AppendChild(xn); //添加子节点
xd.Save(Server.MapPath("web.config")); //存回文件
txtKey.Text="";txtValue.Text="";
BindData();
}
4.删除键。
private void cmd_Del_Click(object sender, System.EventArgs e)
{
XmlDocument xd=new XmlDocument();
xd.Load(Server.MapPath("web.config"));
XmlNode father=xd.SelectSingleNode("configuration/appSettings"); //选择父节点
XmlNodeList xnl=father.ChildNodes; //获取子节点的一个集合
foreach(XmlNode xn in xnl) //遍历子节点
{
if(xn.Attributes["key"].Value==txtKey.Text) //找到选择的节点删除掉
father.RemoveChild(xn);
}
xd.Save(Server.MapPath("web.config")); //存回文件
txtKey.Text="";txtValue.Text="";
BindData();
}
5. 页面首次加载时在载入现有的设置项,选择已有项时显示键值。
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
BindData(); //调用函数将数据读入ListBox
}
private void SelectedIndexChanged(object sender, System.EventArgs e)
{
txtKey.Text=ListBox1.Items[ListBox1.SelectedIndex].Text;
txtValue.Text=ListBox1.Items[ListBox1.SelectedIndex].Value;
}