Asp.Net 动态创建控件并保存取值

本文介绍了一个基于ASP.NET的XML配置文件编辑器实现方法,该编辑器通过动态生成控件来展示和编辑XML文件中的配置项,并支持将更改保存回原始文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字体变小 字体变大

转自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>
  &nbsp;&nbsp;<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>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值