本以爲可以用下面的方法動態創建對象,並且提取控件的值:
//增加序列號顯示
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)
{ }
以上是本人的一次一次小總結 希望能給朋友拋磚引玉之功效!少走彎路。。。