2008-12-11 64 views
0

問候!無法在回發時重新綁定FormView控件

我有這必將XmlDataSources一個FormView內一個DropDownList:

<asp:FormView ID="MyFormView" runat="server" DataSourceID="MyXmlDataSource"> 
    <ItemTemplate> 
     <h1><%# XPath("SomeNode")%></h1> 
     <asp:Label ID="MyLabel" runat="server" AssociatedControlID="MyDdl" Text='<%# XPath("SomeOtherNode")%>' /> 
     <asp:DropDownList ID="MyDdl" 
          runat="server" 
          DataSourceID="MyDdlDataSource" 
          DataTextField="name" 
          DataValueField="value" 
          AutoPostBack="true" 
          OnSelectedIndexChanged="MyDdl_SelectedIndexChanged"> 
     </asp:DropDownList> 
    </ItemTemplate> 
</asp:FormView> 
<asp:XmlDataSource ID="MyXmlDataSource" runat="server" XPath="Root/MainSection" /> 
<asp:XmlDataSource ID="MyDdlDataSource" runat="server" XPath="Root/MainSection/Areas/*" /> 

在頁面的代碼隱藏,我有以下的OnLoad()方法,以及用於回發期間獲得的選定值下拉列表的方法:

private m_key; 

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 

    string xml_data; 
    if (!IsPostBack) 
    { 
     xml_data = GetMyXml(0); // default value 
     MyXmlDataSource.Data = xml_data; 
     MyDdlDataSource.Data = xml_data; 
    } 
    else 
    { 
     GetSelections(); 
     xml_data = GetMyXml(m_key); 
     MyXmlDataSource.Data = xml_data; 
     MyXmlDataSource.DataBind(); 
    } 
} 

private void GetSelections() 
{ 
    DropDownList l_MyDdl = FindMyControl<DropDownList>("MyDdl"); 
    if (l_MyDdl != null) 
     if (!Int32.TryParse(l_MyDdl.SelectedItem.Value, out m_key)) 
      m_key = 0; 
} 

一切都很好,直到回發作爲下拉列表更改的結果發生。發生這種情況時,我從下拉列表中獲取所選項目的值,並將下拉列表中的值作爲參數傳遞給我的GetMyXml()方法,然後將FormView的數據源設置爲GetMyXml中新返回的XML數據( )。我在回發期間查看了「xml_data」的值,它絕對正確。但是,FormView(如XPath(「SomeNode」))頁面上顯示的值是發生回發之前的值,而不是xml_data中返回的值。爲什麼會發生這種情況,我將如何着手解決它?提前致謝。

回答

0

你可以以自動重新綁定您必須對控件啓用ViewState中後MyXmlDataSource.DataBind();

+0

出於某種原因,當我嘗試的時候,我得到一個空引用異常。爲什麼會這樣? – Bullines 2008-12-11 14:14:09

0
formView.Databind(); 
this.page.databind(); 
0

當您使用DataSource對象時,您不必在背後的coe代碼中執行任何手動數據綁定。實現數據源的OnSelecting事件並在該方法中調用GetSelections

編輯:我在這裏速度太快了。 XmlDataSource不是OnSelecting事件。它有一個OnDataBind,但這裏的事件參數只是一個標準的EventArg,所以我不知道如何將GetSelections的結果綁定到它。對不起