我绑定了一个下拉列表。它适用于初始加载。在后续加载(回发)时,它不会刷新下拉列表中的项目。

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();”即可。解决了这个问题。

有帮助吗?

解决方案

在回发时,正在重新应用视图状态+您说您正在尝试再次加载值。我建议让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;

请参阅有关'使用'和IDisposable的MSDN文档了解详细信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top