我绑定了一个下拉列表。它适用于初始加载。在后续加载(回发)时,它不会刷新下拉列表中的项目。
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);
}
我已经确认在回发中数据被绑定到下拉列表并且项目已成功添加。但是当页面呈现下拉列表时没有任何新值。
我看到两种可能性:控件没有渲染新值或者值被清除。我不知道在哪里寻找可能的问题。
修改
我发现了这个问题。下拉列表嵌入在条件更新面板中。只需调用“UpdatePanel.Update();”解决了这个问题。
答案 0 :(得分:1)
在回发时,正在重新应用视图状态+您说您正在尝试再次加载值。我建议让viewstate在回发时承担所有的重量。只有在首次点击页面时加载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对象是Disposed。我的第二个猜测是,这会导致产生问题的副作用。
using (DataView dv = dtProductGroup.DefaultView)
{
相反,请忽略使用并编写一个常规声明,如下所示(当页面完成呈现时,DataView将与其他所有内容一起处理,因此实际上并不需要自己执行此操作。)
DataView dv = dtProductGroup.DefaultView;