簡體   English   中英

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

[英]Can't Rebind FormView Control on Postback

問候!

我在FormView內有一個DropDownList,綁定到XmlDataSources:

<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()方法以及在回發期間獲取所選值dropdownlist的方法:

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_data”的值,它的確是正確的。 但是,在FormView頁面上顯示的值(如XPath(“ SomeNode”))是回發發生之前的值,而不是xml_data中返回的值。 為什么會發生這種情況,我將如何解決呢? 提前致謝。

為了自動重新綁定,您必須在該控件上啟用ViewState。

使用DataSource對象時,無需在后面的coe代碼中進行任何手動數據綁定。 實現數據源的OnSelecting事件並在該方法中調用GetSelections

編輯:我在這里太快了。 XmlDataSource沒有OnSelecting事件。 它有一個OnDataBind,但是這里的event參數只是一個標准的EventArg ,所以我不知道如何將GetSelections的結果綁定到它。 抱歉

您可以在MyFormView.DataBind()之后嘗試MyXmlDataSource.DataBind();

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM