通过 ASP.Net 中的循环在一个网络表单中使用多个相同的用户控件
Using multiple same usercontrol in one webform by a loop in ASP.Net
我有一个用户控件,我想在我的网络表单中通过循环创建一些实例。
一切正常,但所有实例显示相同的数据(最后一个实例的数据)!
我的代码是:(我的用户控件是:WebUserControl)
MyDataSet.tblMyDataTable oTable = new MyDataSet.tblMyDataTable();
MyDataSetTableAdapters.tblMyTableAdapter oAdapter
= new MyDataSetTableAdapters.tblMyTableAdapter();
oAdapter.Fill(oTable);
for (int i = 0; i < oTable .Count; i++)
{
Context.Items["ID"] = oTable[i].ID;
WebUserControl newControl = new WebUserControl();
newControl = (WebUserControl)LoadControl("~/WebUserControl.ascx");
newControl.ID = "myControl" + i.ToString();
System.Web.UI.HtmlControls.HtmlTableRow newRow
= new System.Web.UI.HtmlControls.HtmlTableRow();
System.Web.UI.HtmlControls.HtmlTableCell newCell
= new System.Web.UI.HtmlControls.HtmlTableCell();
newCell.Controls.Add(newControl);
newRow.Controls.Add(newCell);
myTable.Rows.Insert(0, newRow);
}
如果我的uercontrol中出现Page_Load,我的代码是:
myID = (string)Context.Items["ID"].ToString().Clone();
ShowNewsSummary(myID);
ShowNewsSummary 是一个填充用户控件字段的函数。
谢谢。
您将在循环的每次迭代中覆盖此上下文项,这意味着将仅保留最后一次迭代...
Context.Items["ID"] = oTable[i].ID;
所有用户控件的Page_Load
将仅在父页面'Page_Load`之后触发已完成。
所以你需要使用索引或者ID来存储值...
newControl.ID = "myControl" + i.ToString();
Context.Items[newControl.ID] = oTable[i].ID;
然后获取用户控件中的值...
myID = (string)Context.Items[this.ID].ToString().Clone();
我有一个用户控件,我想在我的网络表单中通过循环创建一些实例。 一切正常,但所有实例显示相同的数据(最后一个实例的数据)!
我的代码是:(我的用户控件是:WebUserControl)
MyDataSet.tblMyDataTable oTable = new MyDataSet.tblMyDataTable();
MyDataSetTableAdapters.tblMyTableAdapter oAdapter
= new MyDataSetTableAdapters.tblMyTableAdapter();
oAdapter.Fill(oTable);
for (int i = 0; i < oTable .Count; i++)
{
Context.Items["ID"] = oTable[i].ID;
WebUserControl newControl = new WebUserControl();
newControl = (WebUserControl)LoadControl("~/WebUserControl.ascx");
newControl.ID = "myControl" + i.ToString();
System.Web.UI.HtmlControls.HtmlTableRow newRow
= new System.Web.UI.HtmlControls.HtmlTableRow();
System.Web.UI.HtmlControls.HtmlTableCell newCell
= new System.Web.UI.HtmlControls.HtmlTableCell();
newCell.Controls.Add(newControl);
newRow.Controls.Add(newCell);
myTable.Rows.Insert(0, newRow);
}
如果我的uercontrol中出现Page_Load,我的代码是:
myID = (string)Context.Items["ID"].ToString().Clone();
ShowNewsSummary(myID);
ShowNewsSummary 是一个填充用户控件字段的函数。
谢谢。
您将在循环的每次迭代中覆盖此上下文项,这意味着将仅保留最后一次迭代...
Context.Items["ID"] = oTable[i].ID;
所有用户控件的Page_Load
将仅在父页面'Page_Load`之后触发已完成。
所以你需要使用索引或者ID来存储值...
newControl.ID = "myControl" + i.ToString();
Context.Items[newControl.ID] = oTable[i].ID;
然后获取用户控件中的值...
myID = (string)Context.Items[this.ID].ToString().Clone();