質問

ドロップダウンにバインドしています。初期ロードで機能します。後続の読み込み(ポストバック)では、ドロップダウンのアイテムは更新されません。

using (DataView dv = dtProductGroup.DefaultView)
{
        dv.ApplyDefaultSort = false; 
        dv.Sort = "KVIGroupName ASC";

        ddlGroup.ClearSelection();
        ddlGroup.Items.Clear();

        string strAll = Localization.GetResourceValue("_strddlStatusLBAll");
        ddlGroup.DataValueField = "KVIGroupId";
        ddlGroup.DataTextField = "KVIGroupName";
        ddlGroup.DataSource = dv;
        ddlGroup.DataBind();

        ListItem item = new ListItem(strAll, "0");
        ddlGroup.Items.Insert(0, item); 
}

ポストバックで、データがドロップダウンにバインドされ、アイテムが正常に追加されることを確認しました。しかし、ページがレンダリングされるとき、ドロップダウンには新しい値はありません。

次の2つの可能性があります。コントロールが新しい値をレンダリングしていないか、値がクリアされています。考えられる問題を探す場所が足りません。

編集

問題を発見しました。ドロップダウンリストは、条件付きUpdatePanelに埋め込まれていました。 " UpdatePanel.Update();"を呼び出すだけです問題を解決しました。

役に立ちましたか?

解決

ポストバックで、ビューステートが再適用されます+値を再度ロードしようとしています。ビューステートにポストバックのすべての重みを持たせることをお勧めします。そのようにif(!IsPostBack)を追加して、ページが最初にヒットしたときにのみ値をロードします

using (DataView dv = dtProductGroup.DefaultView)
{
   if (! IsPostBack) {

        dv.ApplyDefaultSort = false; 
        dv.Sort = "KVIGroupName ASC";

        ddlGroup.ClearSelection();
        ddlGroup.Items.Clear();

        string strAll = Localization.GetResourceValue("_strddlStatusLBAll");
        ddlGroup.DataValueField = "KVIGroupId";
        ddlGroup.DataTextField = "KVIGroupName";
        ddlGroup.DataSource = dv;
        ddlGroup.DataBind();

        ListItem item = new ListItem(strAll, "0");
        ddlGroup.Items.Insert(0, item); 
   }
}

編集: また、構文により、コードブロックの終了時にdvによって参照されるDataViewオブジェクトが破棄されます。私の2番目の推測は、これが問題を引き起こす副作用を引き起こすことです。

using (DataView dv = dtProductGroup.DefaultView)
{

代わりに、次のように使用を省略して、通常の宣言を記述します(ページのレンダリングが完了すると、DataViewは他のすべてと一緒に破棄されるため、実際に自分で行う必要はありません)。

DataView dv = dtProductGroup.DefaultView;

「使用」およびIDisposableに関するMSDNドキュメントを参照してください。 詳細情報。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top