データバインド後にドロップダウンがレンダリングされない
-
05-07-2019 - |
質問
ドロップダウンにバインドしています。初期ロードで機能します。後続の読み込み(ポストバック)では、ドロップダウンのアイテムは更新されません。
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;
所属していません StackOverflow