2017-06-17 16 views
0

私はusercontrolを持っており、Webフォームのループでインスタンスを作成したいとします。 すべてはOKですが、すべてのインスタンスが同じデータを表示しています(最後のインスタンスのデータ)!ASP.Netのループで1つのWebフォームで複数の同じユーザーコントロールを使用する

私のコードは次のとおりです。(私のUserControlがある:WebUserControl)私のuercontrol中のPage_Loadの場合に

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); 
    } 

、私のコードは次のとおりです。ShowNewsSummaryはフィールドを埋める機能です

myID = (string)Context.Items["ID"].ToString().Clone(); 
    ShowNewsSummary(myID); 

ユーザーコントロールの

ありがとうございました。

答えて

1

あなたが唯一の最後の繰り返しが残ることを意味し、ループの各反復でこのコンテキスト項目を上書きしている...

Context.Items["ID"] = oTable[i].ID; 

Page_Loadすべてユーザーコントロールは、後にのみを解雇されます親ページ 'Page_Load`が完了しました。

ですから、ユーザーコントロールの値を取得し、その後

newControl.ID = "myControl" + i.ToString(); 
Context.Items[newControl.ID] = oTable[i].ID; 

...値を格納するインデックスまたはIDを使用する必要があると...

myID = (string)Context.Items[this.ID].ToString().Clone(); 
+0

うわー!ありがとう@freefaller。そのとおり。 –

+0

問題ありません。あなたのプロジェクトの残りの部分と幸運:-) – freefaller

関連する問題