2008-08-22 18 views
4

Ich habe eine Formularansicht, in der Bearbeitungsvorlage habe ich zwei Dropdown-Menüs. Dropdown 1 wird explizit mit einer Liste zulässiger Werte festgelegt. Es ist auch auf Autopostback eingestellt. Drop-down 2 ist datenbankbezogen zu einer Objektdatenquelle, diese Objektdatenbank verwendet das erste Dropdown als einen der Parameter. (Die Idee ist, dass Drop-down-1 begrenzt, was in Drop-down angezeigt wird 2)Formview Dropdown 2 hängt von Dropdown 1

Auf die erste Ansicht der Bearbeitungsvorlage für ein Element funktioniert es gut. Aber wenn Dropdown 1 ein anderes Element aufweist, ausgewählt es nach zurück und erzeugt einen Fehler

Datenbindung Methoden wie Eval(), XPath() und bind() können nur von a im Zusammenhang verwendet werden datengebundene Steuerung.

Hier ist die Dropdown-Liste # 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> 

Und hier ist der 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> 

Jede Hilfe, wie dies bekommen würde arbeiten sehr appriciated.

+0

Haben Sie das Problem gelöst, sonst werde ich Ihnen eine andere und elegante Lösung anbieten? –

Antwort

0

Klingt, dass die Steuerelemente nach dem Postback nicht ordnungsgemäß verbunden sind.

Haben Sie das erste Dropdown auf der Seite oder im Codebehind gespeichert? Wenn Codebehind, machst du es in on_init oder on_load jedes Mal?

Möglicherweise liegt ein Problem vor, dass der SelectedValue des zweiten Dropdown-Menüs nach dem Postback auf ein nicht vorhandenes Element gesetzt ist.

0

Es sei denn, Ihre zweite Dropdown-Liste befindet sich in einem datengebundenen Steuerelement (z. B. ein Repeater) - ich bin mir nicht sicher, an was Sie SelectiveValue binden möchten. Anscheinend ist .NET auch nicht - da ist wahrscheinlich der Fehler aufgetreten.

Woher soll Connect_ToProjectId kommen?

3

Ich hatte ein ähnliches Problem mit gebundenen Dropdown-Listen in einem FormView. Ich habe mich darum gekümmert, indem ich den ausgewählten Wert manuell im "OnDataBound" der Formularansicht gesetzt habe.

(weiß nicht, wo Sie ConnectToProject_ID Suche von)

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

Wenn Sie bereit, die "OnItemInserting" Ereignis zu speichern, verwenden Sie:

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

oder "OnItemUpdating"

Wenn Sie zum Speichern bereit sind, verwenden Sie das Ereignis "OnItemInserting":

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