2012-02-07 12 views
0

私は内部に簡単なリピータを持つUserControlを持っています。これは、コントロールに渡されると標準のデータバインディングを使用してリピーターにデータを取り込むdataというプロパティを持ちます。同じascxコントロールのLoadControlをプレースホルダで複数回使用

ページにはプレースホルダがあります。

私は結果が毎回異なっている次

 Dim qDetail As New UserControls_ReportDataTable 
     qDetail = DirectCast(LoadControl("~/UserControls/ReportDataTable.ascx"), UserControls_ReportDataTable) 
     qDetail.data = result 
     phBCPSACustomQuestions.Controls.Add(qDetail) 

を行うループを持っています。

問題は、私のページが見えるループの最後に、コントロールのすべてのインスタンスが結果データの最後のセットで設定されていることです。

これはなぜ起こっているのですか?

--update - コメントに基づいて

ただ、いくつかの詳細。
制御におけるプロパティ「データ」は、以下のように定義される:

特性データをIEnumerableを

ように、私は結果が各ループ反復で異なることを確認しました。

これは、私は確かに言うことはできませんが、私はあなたのループの外で「結果」を定義していることを推測したいすべてのコードを見ずにループ自体

For Each tblRow As DataRowView In dSet.Tables(0).DefaultView 

     Dim result As DataView = dSet.Tables(1).DefaultView 
     result.RowFilter = "QID = " & tblRow("QID").ToString 


     Dim qDetail As UserControls_ReportDataTable 
     qDetail = DirectCast(LoadControl("~/UserControls/ReportDataTable.ascx"), UserControls_ReportDataTable) 
     qDetail.data = result 
     phBCPSACustomQuestions.Controls.Add(qDetail) 

    Next 
+0

ヒント:最初の行の 'New'は不要です。また、 "data"のプロパティ定義をポストします。 –

+0

完全なループを表示する必要があります。そうでなければ、推測する必要があります。 –

答えて

0

ための完全なコードですそれをループ内に設定します。これは「変更された閉鎖へのアクセス」の状況につながります(それは単に再共有用語かグローバルなものかわかりません)。

いずれにしても、ループ内に変数を定義し、そこに結果の値を設定し、それをコントロールに設定します。あなたの問題を解決するはずです。

+0

結果変数がループの各実行で実際に設定されている場合、これは問題ありません。しかし、それが参照するオブジェクトが変更されている場合、それは問題です。 –

+0

非常に真実ですが、より完全なコードはありませんが、私は彼がやっていることを推測しなければなりませんでした。 – rie819

関連する問題