2008-08-22 7 views
4

J'ai une vue de formulaire, dans le modèle d'édition j'ai deux déroulants. Le menu déroulant 1 est explicitement défini avec une liste de valeurs autorisées. Il est également défini sur autopostback. Dropdown 2 est databound à une objectdatasource, cette objectdatasource utilise la première liste déroulante comme l'un de ses paramètres. (L'idée est que la liste déroulante 1 limite ce qui est affiché dans le menu déroulant 2)Formview Dropdown 2 dépend de Dropdown 1

La première vue du gabarit d'édition d'un élément fonctionne correctement. Mais si déroulant 1 a un autre élément sélectionné, il republier et génère une erreur

méthodes de liaison de données telles que Eval(), XPath() et Bind() ne peuvent être utilisés dans le cadre d'un contrôle de base de données.

Voici la liste déroulante # 2:

<asp:DropDownList ID="ProjectList" runat="server" SelectedValue='<%# Bind("ConnectToProject_ID","{0:D}") %>' DataSourceID="MasterProjectsDataSource2" DataTextField="Name" DataValueField="ID" AppendDataBoundItems="true"> 
     <asp:ListItem Value="0" Text="{No Master Project}" Selected="True" /> 
</asp:DropDownList> 

Et voici le MasterProjectDataSource2:

<asp:ObjectDataSource ID="MasterProjectsDataSource2" runat="server" 
      SelectMethod="GetMasterProjectList" TypeName="WebWorxData.Project" > 
      <SelectParameters> 
       <asp:ControlParameter ControlID="RPMTypeList" Name="RPMType_ID" 
        PropertyName="SelectedValue" Type="Int32" /> 
      </SelectParameters> 
     </asp:ObjectDataSource> 

Toute aide sur la façon d'obtenir ce travail serait grandement appriciated.

+0

Avez-vous résoudre le problème, sinon je viendrai à vous fournir une solution différente et élégante? –

Répondre

0

Il semble que les commandes ne soient pas correctement datées après la publication.

Etes-vous connecté à la première liste déroulante dans la page ou dans le codebehind? Si codebehind, faites-vous dans on_init ou on_load à chaque fois?

Il se peut que le paramètre SelectedValue de la deuxième liste déroulante soit défini sur un élément inexistant après la publication.

0

À moins que votre deuxième liste déroulante ne se trouve dans un contrôle de base de données (par exemple, un répéteur) - je ne suis pas sûr de ce que vous essayez de lier SelectedValue à. Apparemment, ni .NET - car c'est probablement là que l'erreur se produit.

D'où est supposé provenir Connect_ToProjectId?

3

J'ai eu un problème similaire avec les listes déroulantes liées dans un formulaire. J'ai travaillé autour de lui en définissant la valeur sélectionnée manuellement dans "OnDataBound" de formview.

(ne sais pas où vous ConnectToProject_ID de)

FormView fv = (FormView)sender; 
DropDownList ddl = (DropDownList)fv.FindControl("ProjectList"); 
ddl.SelectedValue = String.Format("{0:D}", ConnectToProject_ID); 

Lorsque vous prêt à enregistrer, utiliser l'événement "OnItemInserting":

FormView fv = (FormView)sender; 
DropDownList ddl = (DropDownList)fv.FindControl("ProjectList"); 
e.Values["ConnectToProject_ID"] = ddl.SelectedValue; 

ou "OnItemUpdating"

Lorsque vous êtes prêt à enregistrer, utilisez l'événement "OnItemInserting":

FormView fv = (FormView)sender; 
DropDownList ddl = (DropDownList)fv.FindControl("ProjectList"); 
e.NewValues["ConnectToProject_ID"] = ddl.SelectedValue;