本以为可以用下面的方法动态创建对象,并且提取控件的值:
//增加序列号显示
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)
{ }
以上是本人的一次一次小总结 希望能给朋友抛砖引玉之功效!少走弯路。。。