zoukankan      html  css  js  c++  java
  • 动态添加table,动态添加控件

    前段时间在WEBFORM中要实现产品的动态和产品的模块化功能,其中要在页面中实现产品的动态属性加载,这

    就用到了动态添加table(table在这里主要是做布局),动态添加控件,但在实现过程也遇到了些小问题,在此把问题

    说说,以及问题的解决方案,和大家一起分享。

    实现动态添加table,动态添加控件分成两种行为操作:加载页面时创建加载、加载页面后创建加载

    一。加载页面时创建加载

         什么意思呢?就是在Page_Load时就开始加载动态的控件或table,下面看看代码吧!~

              protected void Page_Load(object sender, EventArgs e)
              {

                         if (!IsPostBack)
                        {

                         }

                }

              //动态创建table,以及控件

             private void DynamicTableRow()

             {

               .........................

               //创建你要动态创建的控件或table

             }

    对于这种行为操作是相对简单的了,不会出现视图加载失败的问题。

    二。加载页面后创建加载

         举例说明吧,如我在页面上添加了一个DropDownList的控件,带入如下:

             <asp:DropDownList ID="DropDownList1" runat="server">
            <asp:ListItem>1</asp:ListItem>
            <asp:ListItem>5</asp:ListItem>
            <asp:ListItem>7</asp:ListItem>
            </asp:DropDownList>

          当选择1时要执行添加1个TextBox的控件

          当选择5时要执行添加5个TextBox的控件

          当选择7时要执行添加7个TextBox的控件

          且当点击页面上的“提交”按钮时要获取到这些创建的控件和输入的控件的值

         

          如果使用之前那种方法,你在页面上是可以看到动态加载了控件和table,但你在动态加载生成的TextBox控件中输入值,并

         点击“提交”时,发现找不到控件,且你查看页面的源文件的HTML代码页没有发现动态创建的控件,之所以这样,我上网查

        了相关的资料,好像是视图没有把动态创建的控件加载进去,我采用了一个方法去解决这个问题,就是重写了LoadViewState

         还原视图状态信息,代码如下:

             /// <summary>
        /// 重写LoadViewState,还原视图状态信息
        /// </summary>
        /// <param name="savedState"></param>
        protected override void LoadViewState(object savedState)
        {
            base.LoadViewState(savedState);
            int n = this.table.Rows.Count;
            if (ViewState["controsladded"] == null)
            {
                if (Session["ids"] != null)
                {
                    DynamicTableRow(Session["ids"] as List<int>);
                }
            }
        }
          

        /// <summary>
        /// 动态控制页面table,加载一行的数据及控件,一行4列,2个属性,2个值
        /// </summary>
        private void DynamicTableRow(List<int> ids)
        {
            int num = 0;
            int nowidsCount = ids.Count;
            TableRow tr = new TableRow();
            foreach (int id in ids)
            {
                num = num + 1;
                TableHeaderCell celTh = new TableHeaderCell();
                celTh.Width = 130;

                Label thLabel = new Label();
                thLabel.ID = id.ToString() + "+label";
                thLabel.Text = NameTechnique(id);
                celTh.Controls.Add(thLabel);

                TableCell celTd = new TableCell();

                TextBox txtBox = new TextBox();
                txtBox.TextMode = TextBoxMode.MultiLine;
                txtBox.Width = 300;
                txtBox.ID = id.ToString();
                celTd.Controls.Add(txtBox);

                tr.Cells.Add(celTh);
                tr.Cells.Add(celTd);
                //控制一行显示的数据

                if (num == 2)
                {
                    this.table.Rows.Add(tr);
                    nowidsCount = nowidsCount - 2;
                }
                else
                {
                    if (num == nowidsCount)
                    {
                        if (num < 2)
                        {
                            for (int i = 1; i <= (2 - num); i++)
                            {
                                //补空列,一行必须满足有4列
                                TableHeaderCell celThNone = new TableHeaderCell();
                                celThNone.Width = 130;
                                TableCell celTd1None = new TableCell();

                                tr.Cells.Add(celThNone);
                                tr.Cells.Add(celTd1None);
                            }
                        }
                        this.table.Rows.Add(tr);
                    }
                }
                if (num == 2)
                {
                    tr = new TableRow();
                    num = 0;
                }
            }
            ViewState["controlsadded"] = true;
        }

        以上是个人的简单总结,对这个页面的视图也没有什么研究,有个研究的朋友希望一起分享,感兴起的朋友可以一起讨论学习!~

  • 相关阅读:
    Ubuntu下配置Viw Tab键缩进格数
    Windows文件传给Ubuntu出现乱码问题
    [Luogu] P4948 数列求和
    [Luogu]P1286 两数之和
    [Luogu]P2717 寒假作业
    [Luogu]P5110 块速递推
    Breeze魔兽编程交流论坛
    #pragma 预处理指令详解
    Api Hook 细析(一)
    CMS(网站内容管理系统)有哪些?
  • 原文地址:https://www.cnblogs.com/wq3if2in/p/1490201.html
Copyright © 2011-2022 走看看