代码之家  ›  专栏  ›  技术社区  ›  Chuck Conway

数据绑定后未呈现下拉列表

  •  0
  • Chuck Conway  · 技术社区  · 16 年前

    我正在绑定下拉列表。它在初始负载下工作。在后续加载(回发)时,它不会刷新下拉列表中的项目。

    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); 
    }
    

    我已经确认,在回发时,数据正绑定到下拉列表中,并且已成功添加项。但是当页面呈现时,下拉列表没有任何新值。

    我看到两种可能性:控件没有呈现新的值,或者值被清除。我不知该在哪里寻找可能的问题。

    编辑

    我发现了问题。DropDownList嵌入在条件更新面板中。仅仅调用“updatepanel.update();”就解决了这个问题。

    1 回复  |  直到 16 年前
        1
  •  1
  •   John K    16 年前

    回发后,视图状态将被重新应用+您说您正在尝试再次加载值。我建议让viewstate在回邮时承担所有的重量。只有在第一次点击页面时才加载值,方法是添加if(!像这样。

    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对象。我的第二个猜测是,这会导致一个导致问题的副作用。

    using (DataView dv = dtProductGroup.DefaultView)
    {
    

    相反,不要使用它,而是像下面这样编写一个常规的声明符(在页面渲染完成后,数据视图将与其他所有内容一起处理,因此实际上不需要自己处理)。

    DataView dv = dtProductGroup.DefaultView;
    

    MSDN documentation about 'using' and IDisposable 详细信息。