一個困擾兩天的創建動態控件的問題

本以爲可以用下面的方法動態創建對象,並且提取控件的值:

 //增加序列號顯示
    protected void addPSlabel(int begini,int endi, string panels)
    {
        Panel pl;
        int j = 0;
        pl = (Panel)this.FindControl(panels);
        //pl.Controls.Clear();
        pl.Controls.Add(new LiteralControl("<table width=100%><tr>"));
        for (int i = begini; i <= endi; i++)
        {
            Label lb = new Label();
            lb.ID = "LabelPS" + i.ToString();

            if (j != 0 && j % 3 == 0)
            {
                pl.Controls.Add(new LiteralControl("</tr><tr>"));

            }
            pl.Controls.Add(new LiteralControl("<td>"));
            pl.Controls.Add(lb);
            pl.Controls.Add(new LiteralControl("</td>"));
            if (j != 0 && j % 5 == 0)
            {
                pl.Controls.Add(new LiteralControl("</tr><tr>"));
                j = -1;
            }
            j = j + 1;
        }
        pl.Controls.Add(new LiteralControl("</tr></table>"));
    }

這個是增加的方法

然後在數據綁定時創建並賦值,瀏覽時可以看到沒有問題 能夠看到值了

但是問題出現了 要再次點擊時提交頁面時 用下面的方法 提取控件的值 老是出現對象沒有初始化

  string lbName;
            Label lb;
            Panel pl = (Panel)this.FindControl("Panel1");
            DataRow row = dt.NewRow();
            for (int i = 0; i <= icount - 1; i++)
            {
                ij = i + 1;
                lbName="LabelPS"+ij.ToString();
                lb = (Label)pl.FindControl(lbName);
                row[i] = lb.Text.Trim();
            }

後來查看網頁的源文件,也有那個ID的控件啊 。。。思考了很久,難道是PR值太低

經過詳細的思考 後來才發現 原來是 頁面提交後 page load了一次 那些動態創建的控件是不能使用了的 所以要在頁面重新加載時再次創建一次

 try
        {
            int sumcount =int.Parse(Session["conCount"].ToString());
            if (sumcount > 0)
            {
                addPSlabel(1, sumcount, "Panel1");
            }
        }
        catch (Exception)
        { }

以上是本人的一次一次小總結 希望能給朋友拋磚引玉之功效!少走彎路。。。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章