2008-12-11 3 views
0

Salutations!Impossible de renoncer au contrôle FormView lors de la publication

I ont une DropDownList dans un FormView qui sont liés à 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/*" /> 

Dans le codebehind de la page, je la méthode OnLoad() suivant, ainsi que la méthode pour obtenir la valeur sélectionnée dropdownlist pendant postback :

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; 
} 

Tout fonctionne très bien, jusqu'à ce qu'une publication soit effectuée suite à la modification de la liste déroulante. Lorsque cela se produit, j'obtiens la valeur de l'élément sélectionné dans la liste déroulante, je la passe à ma méthode GetMyXml() avec la valeur de la liste déroulante en tant que paramètre, puis définissons la source de données FormView aux données XML récemment retournées depuis GetMyXml (). J'ai regardé la valeur de "xml_data" pendant la publication et c'est vraiment correct. Cependant, les valeurs affichées sur la page FormView (comme XPath ("SomeNode")) sont les valeurs d'avant la publication et non celles renvoyées dans xml_data. Pourquoi cela se produirait-il et comment ferais-je pour le résoudre? Merci d'avance.

Répondre

0

Vous pouvez essayer MyFormView.DataBind() après MyXmlDataSource.DataBind();

+0

Pour une raison quelconque, j'obtiens une exception de référence nulle lorsque j'essaie cela. Pourquoi cela serait-il? – Bullines

+0

Je ne suis pas vraiment sûr, vous devriez mettre à jour la question pour refléter cela. Quelqu'un pourrait avoir une réponse. – sirrocco

1

afin de vous devez rebind ont automatiquement le ViewState activé sur ce contrôle.

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

Vous n'avez pas à effectuer de liaison de données manuelle dans le code coe lorsque vous utilisez un objet DataSource. Implémentez l'événement OnSelecting de la source de données et appelez le GetSelections dans cette méthode.

Edit: J'étais trop rapide ici. XmlDataSource ne pas un événement OnSelecting. Il a un OnDataBind, mais ici l'argument d'événement est juste un EventArg standard, ainsi je ne sais pas comment vous lieriez le résultat de GetSelections à lui. Désolé

Questions connexes