Temp

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 IBatisNet.Common;
using IBatisNet.DataMapper;
using IBatisNet.Common.Utilities;
using DAO;
using Model;

public partial class DynamicControl_two : System.Web.UI.Page
{
    private MainProcess[] main;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (ViewState["MP"] == null)
        {
            main = new MainProcess[1];
            main[0] = new MainProcess();
           // main[0].addProcess(new MainProcess.Process());
            ViewState["MP"] = main;
            //Response.Write("<script language=javascript>alert('null')</script>");
            addMainProcess();
        }
        else
        {
              //Response.Write("<script language=javascript>alert('Load')</script>");
            this.Container.Controls.Clear();
            addMainProcess();
        }
    }
    private void addMainProcess()
    {
        main = (MainProcess[])ViewState["MP"];
        for (int num = 1; num < main.Length+ 1; num++)
        {
            Table table = new Table();
            table.ID = "_table" + num;
            TableRow trHead = new TableRow();
            TableCell tcHead = new TableCell();

            //add table head
            Label lblHead = new Label();
            lblHead.ID = "_lblHead" + num;
            lblHead.Text = "MainProcess: " + num;

            Button btnDeleteMainProcess = new Button();
            btnDeleteMainProcess.ID = "_btnDeleteMainProcess" + num;
            btnDeleteMainProcess.Text = "DeleteMainProcess";
            btnDeleteMainProcess.Click += new EventHandler(btnDeleteMainProcess_Click);
            btnDeleteMainProcess.CommandName = "_deleteMainProcess" + num;

            Button btnAddProcess = new Button();
            btnAddProcess.ID = "_btnAddProcess" + num;
            btnAddProcess.Text = "AddProcess";
            btnAddProcess.Click += new EventHandler(btnAddProcess_Click);
            btnAddProcess.CommandName = "_addProcess" + num;

            tcHead.Controls.Add(lblHead);
            tcHead.Controls.Add(btnDeleteMainProcess);
            tcHead.Controls.Add(btnAddProcess);
            trHead.Controls.Add(tcHead);
            table.Controls.Add(trHead);
           
       
            for (int i = 1; i < main[num-1].ProList.Length+1; i++)
            {              
                table.Controls.Add(addProcess(num,i));
            }
            this.Container.Controls.Add(table);
        }
    }

    private TableRow addProcess(int mainIndex,int proIndex)
    {
        string location = mainIndex.ToString() + proIndex.ToString();
        //add table row
        TableRow tri = new TableRow();
        TableCell tci = new TableCell();

        Label lblProcessName = new Label();
        lblProcessName.ID = "_lblProName" + location;
        lblProcessName.Text = "Process" + proIndex + ":";

        TextBox txtProcessName = new TextBox();
        txtProcessName.ID = "_txtProcessName" + location;

        Label lblPrincipal = new Label();
        lblPrincipal.ID = "_lblPrincipal" + location;
        lblPrincipal.Text = "Principal:";

        DropDownList ddlPrincipal = new DropDownList();
        ddlPrincipal.ID = "_ddlPrincipal" + location;
        //bindDDL(ddlPrincipal);

        Button btnDeleteProcess = new Button();
        btnDeleteProcess.ID = "_btnDeleteProcess" + location;
        btnDeleteProcess.Text = "DeleteProcess" + proIndex;
        btnDeleteProcess.Click += new EventHandler(btnDeleteProcess_Click);
        btnDeleteProcess.CommandName = "_deleteProcess" + location;


        tci.Controls.Add(lblProcessName);
        tci.Controls.Add(txtProcessName);
        tci.Controls.Add(lblPrincipal);
        tci.Controls.Add(ddlPrincipal);
        tci.Controls.Add(btnDeleteProcess);

        tri.Controls.Add(tci);
        return tri;
    }

    protected void btnAddMainProcess_Click(object sender, EventArgs e)
    {
       // Response.Write("<script language=javascript>alert('addMain')</script>");
        main = (MainProcess[])ViewState["MP"];
        MainProcess[] temp = new MainProcess[main.Length + 1];
        for (int i = 0; i < main.Length; i++)
        {
            temp[i] = main[i];
        }
        temp[main.Length] = new MainProcess();
        ViewState["MP"] = temp;
    }  

    void btnDeleteMainProcess_Click(object sender, EventArgs e)
    {
       // Response.Write("<script language=javascript>alert('DeleteMain')</script>");
        main = (MainProcess[])ViewState["MP"];
        string flag = ((Button)sender).CommandName;
        int index =int.Parse(flag.Substring(flag.Length-1,1))-1;

        MainProcess[] temp = new MainProcess[main.Length - 1];
        for (int i = 0; i < main.Length; i++)
        {
            if (i < index) temp[i] = main[i];
            else if (i > index) temp[i - 1] = main[i];
        }
        ViewState["MP"] = temp;
    }

    void btnAddProcess_Click(object sender, EventArgs e)
    {
        string flag = ((Button)sender).CommandName;
        int index = int.Parse(flag.Substring(flag.Length - 1, 1)) - 1;
        main = (MainProcess[])ViewState["MP"];
        main[index].addProcess(new MainProcess.Process());
        ViewState["MP"] = main;
    }
    void btnDeleteProcess_Click(object sender, EventArgs e)
    {
        string flag = ((Button)sender).CommandName;
        string location = flag.Substring(flag.Length - 2, 2);
        int mpIndex = int.Parse(flag.Substring(flag.Length - 2, 1)) - 1;
        int proIndex = int.Parse(flag.Substring(flag.Length - 1, 1)) - 1;
        main = (MainProcess[])ViewState["MP"];
        main[mpIndex].removeProcess(proIndex);
        ViewState["MP"] = main;
    }
    private void readData()
    {
        main = (MainProcess[])ViewState["MP"];
        for (int i = 0; i < main.Length; i++)
        {
            Table tabel = (Table)Container.FindControl("_table" + (i+1));
            for (int row = 1; row < tabel.Rows.Count; row++)
            {
               // main[i].ProList[row].ProName = ((TextBox)tabel.Rows[row].Cells[0].FindControl("_txtProcessName" + (i+1).ToString() + (row+1))).Text;
                main[i].ProList[row-1].ProName = ((TextBox)tabel.Rows[row].Cells[0].Controls[1]).Text;
                Response.Write(main[i].ProList[row-1].ProName + "<br>");
            }
        }
        ViewState["MP"] = main;
    }
    private void bindData()
    {

    }
    private void bindDDL(DropDownList ddl)
    {
        ddl.DataSource = Mapper.Instance().QueryForList("SelectArticalDetail", null);
        ddl.DataTextField = "Author_Name";
        ddl.DataValueField = "Detail_ID";
        ddl.DataBind();
        ddl.Items.Insert(0, new ListItem("", "-1"));
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        readData();
    }
}

原文地址:https://www.cnblogs.com/Flynn/p/869522.html