2

の中にRepeaterネストされていGridViewます。のRowDataBoundイベントで、 (行の列の1つに基づいて)GridViewを設定してから、をバインドします。これは初期ロードでは問題なく機能しますが、新しいアイテムを動的に追加できる必要があります。DataSourceRepeaterRepeater

にアイテムを追加し、DataSourceそれをに保存しViewStateます。通常はメソッド呼び出しを使用してバインドしますが、ViewState代わりに保存されたオブジェクトにバインドします。はDataSouce変更を反映していますが、ページは反映していません。

私は何が欠けていますか?ネストせずに別のページでまったく同じ設定を行っていますが、完全に機能します。

if (ViewState["RepeaterObj"]!=null)
{
   rpt.DataSource=(IList<DataTransferObject>)ViewState["RepeaterObj"];
}
else
{
   rpt.DataSource = controller.GetObj(param);
   rpt.DataBind();
}
4

3 に答える 3

1

一時的なものは失われるViewStateと思っていたのですが、完全に使用をやめることで問題を解決することになりました。結局、完璧に機能するクラスレベルになりました。の間に何が起こるかを正しく理解していなかったようです。DataSourcepostbackvariablepostback

于 2011-11-14T17:02:45.227 に答える
0

問題は、を再バインドしていないことだと思いますRepeater。オブジェクトを見るためにバインドする方法を変更すると言いますViewStateが、実際にをトリガーしBindていますか?あなたはそうではなく、ページはコントロールのに保存されている現在のデータでリロードしているようですViewState

Repeatersバインドイベントを明示的に呼び出して、リバウンドしていることを確認してください。

GridView編集:私はそれがあなたがあなただけでなくあなたを再バインドする必要があるかもしれないところで何かをするかもしれないと思うRepeater

于 2011-10-28T16:45:58.980 に答える
0

まず第一に、ViewStateにデータソースを保存するべきではありません。それはあなたがそれを置くことができるほとんど最悪の場所です。

問題については、新しいアイテムがリピーターに追加されたときにGridViewを再バインドするか、新しいレコードを保存してそこで再バインドするイベントでリピーターを見つけることをお勧めします。

于 2011-10-28T18:26:10.830 に答える