0

ご挨拶!

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 で返される値ではありません。なぜこれが起こるのでしょうか?どうすれば解決できますか? 前もって感謝します。

4

4 に答える 4

1

自動的に再バインドするには、そのコントロールで ViewState を有効にする必要があります。

于 2008-12-29T16:00:41.983 に答える
0

MyFormView.DataBind()あなたは後に試すことができますMyXmlDataSource.DataBind();

于 2008-12-11T06:38:11.397 に答える
0

DataSource オブジェクトを使用している場合、coe コード ビハインドで手動のデータ バインディングを行う必要はありません。データ ソースの OnSelecting イベントを実装し、GetSelectionsそのメソッド内で呼び出します。

編集:ここでは速すぎました。XmlDataSource は OnSelecting イベントを行いません。OnDataBind がありますが、ここでは event 引数は単なる standardEventArgであるため、GetSelections からの結果をそれにバインドする方法がわかりません。ごめん

于 2009-12-04T21:07:09.300 に答える
0
formView.Databind();
this.page.databind();
于 2009-01-03T06:43:50.953 に答える