Не удается повторно привязать элемент управления FormView при обратной передаче - PullRequest
0 голосов
/ 11 декабря 2008

Привет!

У меня есть DropDownList в FormView, которые связаны с 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 (), а также метод для получения выпадающего списка выбранного значения во время обратной передачи:

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 для вновь возвращаемых данных XML из GetMyXml ( ). Я посмотрел на значение «xml_data» во время обратной передачи, и это определенно правильно. Однако значения, отображаемые на странице FormView (например, XPath («SomeNode»)), являются значениями, предшествующими обратной передаче, а не значениями, возвращенными в xml_data. Почему это произойдет и как мне решить эту проблему? Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 29 декабря 2008

для автоматического повторного связывания необходимо включить ViewState на этом элементе управления.

0 голосов
/ 05 декабря 2009

При использовании объекта DataSource не требуется выполнять ручную привязку данных в коде коэффициента. Реализуйте событие OnSelecting источника данных и вызовите GetSelections в этом методе.

Редактировать: я был слишком быстр здесь. XmlDataSource не создает событие OnSelecting. Он имеет OnDataBind, но здесь аргумент события - это просто стандартный EventArg, поэтому я не знаю, как бы вы связали с ним результат из GetSelections. К сожалению

0 голосов
/ 03 января 2009
formView.Databind();
this.page.databind();
0 голосов
/ 11 декабря 2008

Вы можете попробовать MyFormView.DataBind() после MyXmlDataSource.DataBind();

...