2012-04-24 132 views
1

我在中继器中有下拉列表。我希望每当回发被提出时,然后重新绑定下拉列表。在中继器中重新绑定下拉列表

问题是,当我debbug这个东西,代码确实通过ddl.databind()运行,但对于一些resons,下拉列表仍然加载列表和从原始viewstate中选择的值。我知道,因为如果我将ddl的EnableViewState设置为“false”,我可以正确重新绑定ddl。

有什么建议吗?

<asp:Repeater ID="reEventsDataTypeOthers" runat="server" Visible="false"> 
... 
<ItemTemplate> 
... 
<asp:DropDownList ID="ddlEventSessionLocation" runat="server" CssClass="ddlControlS1L" Title="Location" EnableViewState="true"/> 

Codebehinde(我试着将它绑定在_ItemCreated和_ItemDataBound,但两者faied):

void reEventsDataTypeOthers_ItemCreated(object sender, RepeaterItemEventArgs e) 
     { 
      if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem) 
       return; 
      FSIDropDownList ddl = e.Item.FindControl("ddlEventSessionLocation") as FSIDropDownList; 
      if (ddl != null && ddl.SelectedValue != "NOTSET") 
      { 
       ddl.DataSource = EventLocations; 
       ddl.DataTextField = "Value"; 
       ddl.DataValueField = "Key"; 
       ddl.DataBind(); 
       ddl.Items.Insert(0, new ListItem("Not Set", "NOTSET")); 
      } 
     } 

UPDATE,问题解决了

我所做的是把下拉列表绑定代码在此repeater的prerender事件方法中,因此可以覆盖viewstate值。

回答