protected void Page_Load(object sender, EventArgs e)
    {
        InsertFUC();
    }    protected void Button1_Click(object sender, EventArgs e)
    {
      
    }
    /// <summary>
    /// 用于保存当前页面上传文件控件集到缓存中
    /// </summary>
    protected void SaveFUC()
    {
        //创建动态增加数组
        int i=0;
        ArrayList AL = new ArrayList();
        foreach (Control C in tabTB.Controls)
        {
            if (C.GetType().ToString() == "System.Web.UI.HtmlControls.HtmlTableRow")
            {
                HtmlTableCell HTC = (HtmlTableCell)C.Controls[0];
                foreach (Control FUC in HTC.Controls)
                {
                    //判断该控件是否为上传控件(TextBox),如果是,则添加到ArrayList中
                    if (FUC.GetType().ToString() == "System.Web.UI.WebControls.TextBox")
                    {
                        TextBox TB = (TextBox)FUC;
                        TB.ID = "TextBox" + i;
                        AL.Add(TB);
                        //Response.Write(TB.ID);
                        i++;
                    }
                }
            }
        }
        //将保存在数组ArrayList中的所有上传控件(TextBox),添加到缓存中,命名为“FilesControls”
        Session.Add("FilesControls", AL);
        //Response.Write(AL.Count.ToString());
    }
    /// <summary>
    /// 用于执行添加一个上传文件控件的操作
    /// </summary>
    protected void InsertFUC()
    {
        ArrayList AL = new ArrayList();
        //清空表格tabFU中原有的上传控件
        this.tabTB.Rows.Clear();
        //调用GetFUCInfo方法,将存放在缓存中的上传控件添加到表格tabFU中
        GetFUCInfo();
        //在表格tabFU中添加一个上传控件
        HtmlTableRow HTR = new HtmlTableRow();
        HtmlTableCell HTC = new HtmlTableCell();
        HTC.Controls.Add(new TextBox());
        HTR.Controls.Add(HTC);
        tabTB.Rows.Add(HTR);
        //调用SaveFUC方法,将添加的上传控件保存在缓存中
        SaveFUC();
    }
    /// <summary>
    /// 用于读取缓存中存储的上传文件控件集
    /// </summary>
    protected void GetFUCInfo()
    {
        ArrayList AL = new ArrayList();
        //判断缓存中是否已存在上传控件
        if (Session["FilesControls"] != null)
        {
            //将缓存中的上传控件集存放在数据集ArrayList中
            AL = (System.Collections.ArrayList)Session["FilesControls"];
            for (int i = 0; i < AL.Count; i++)
            {
                HtmlTableRow HTR = new HtmlTableRow();
                HtmlTableCell HTC = new HtmlTableCell();
                HTC.Controls.Add((System.Web.UI.WebControls.TextBox)AL[i]);
                HTR.Controls.Add(HTC);
                //将上传控件添加到名为tabTB表格中
                tabTB.Rows.Add(HTR);
            }
        }
    }    protected void Button2_Click1(object sender, EventArgs e)
    {
            ArrayList AL = new ArrayList();
            AL = (System.Collections.ArrayList)Session["FilesControls"];
            for (int i = 0; i < AL.Count; i++)
            {
               Response.Write(((TextBox)tabTB.Rows[i].FindControl("TextBox" + i)).Text);
            }
    }

为什么我把 InsertFUC()放到Page_Load里正常,但是放到Button1_Click就会出现   “未将对象引用设置到对象的实例”  这个错误,如果放到Page_Load就会再次执行一次Page_Load里的 InsertFUC(),这样插入数据库的时候就会把空的TEXTBOX里的值传进去,我该怎么办,各位高手救救我吧~!~!~!

解决方案 »

  1.   

    未将对象引用设置到对象的实例 
    你在执行按钮事件的时候先判断 其是否为null 
      

  2.   

      Response.Write(((TextBox)tabTB.Rows[i].FindControl("TextBox" + i)).Text); 
    如果写在按钮事件里,这行报错了~!
      

  3.   

    动态生成的控件.你Page_Load中生成是正确的
    只有生成之后才会执行一些相应的初始化事件
      

  4.   

    先用好asp.net控件吧。不要滥写代码,尽可能地少写代码,所有界面组件都要尽可能在设计窗口声明,而不是写代码动态增加。
      

  5.   

    if (!IsPostBack)
    {
        InsertFUC(); 
    }
    protected void Button1_Click(object sender, EventArgs e) 

        InsertFUC(); 
    }
      

  6.   

    你的代码连最低级的列表控件Repeater的功能几分之一都没有,性能和功能都不高级,为什么不使用一种列表控件(+数据源控件)来设计?如果你要设计好列表控件,等看懂asp.net相应列表控件的源代码之后,然后再来设计你的东西,这样比较实在。
      

  7.   

    页面一刷新,所有动态添加的控件都会消失,所以没有对象。
    由于ViewState的作用,你把控件再添加进去,值应该会被保留的至于值为什么变空了,建议InsertFUC()不要有给控件赋值的语句或函数,单独提供一个只添加控件的函数给Page_Load调用,先试试吧
      

  8.   

    动态添加的控件,点击按钮页面回传数据丢失
    在Pager_Load里每次都会执行
    InsertFUC();   通过ViewState记录增加的数据,在Post_Load里判断不符合添加
    也可使用JS动态添加
    http://topic.csdn.net/u/20070531/16/8627dd88-14ea-48f7-85ae-6399badec95b.html