ASP.NET Zone

Die ASP.NET Community. Alle Antworten rund um Microsoft® Webtechnologien
Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe | Impressum | ASP.NET Zone Suchplugin

in
Home Blogs Foren FAQ Communities Fotos Downloads
Werbeanzeige

Gebundene Dropdownlisten aktualisieren

Letzter Beitrag 05-18-2010, 20:54 von eric4fun. 6 Antworten.
Beiträge sortieren: Zurück Weiter
  •  03-25-2008, 18:02 193710

    Gebundene Dropdownlisten aktualisieren

    Hallo,

    Ich habe 2 abhängige Dropdownlisten.

    Die erste DDL wählt ein Projekt aus, die zweite DDL befindet sich innerhalb eines InsertItemTemplate einer Detailsview und gibt abhängig vom ausgewählten Projekt, die verknüpften Teilschritte aus.

    Das aktualisieren der DDL2 funktioniert aber nur solange ich die 2te DDL nicht binde. Es erscheint dann der Fehler "Datenbindungsmethoden wie Eval(), XPath() und Bind() können nur im Kontext eines datengebundenen Steuerelements verwendet werden."


    ...
    ...
        <asp:DropDownList ID="ProjectDropdown" runat="server" DataSourceID="ObjectDataSource2" DataTextField="title" DataValueField="id"  AppendDataBoundItems="True" AutoPostBack="True">
            <asp:ListItem Value="0">-- Bitte auswählen --</asp:ListItem>
        </asp:DropDownList>
        <asp:ObjectDataSource ID="ObjectDataSource2" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="GetProjectsByStatus" TypeName="ProjectDataSetTableAdapters.projectsTableAdapter">
            <SelectParameters>
                <asp:Parameter DefaultValue="7" Name="StatusID" Type="Int32" />
            </SelectParameters>
        </asp:ObjectDataSource>
    ...
    ...
       <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataKeyNames="id" DataSourceID="ObjectDataSource1" DefaultMode="Insert"  Height="50px" >
            <Fields>
                <asp:TemplateField HeaderText="job_id" SortExpression="job_id">
                    <InsertItemTemplate>
                        </asp:DropDownList ID="JobDownList" runat="server" DataTextField="title" DataValueField="id"  SelectedValue='<%# Bind("job_id") %>' DataSourceID="ObjectDataSource3">
                        <asp:ObjectDataSource ID="ObjectDataSource3" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="GetJobsByProject" TypeName="ProjectDataSetTableAdapters.jobsTableAdapter">
                            <SelectParameters>
                                <asp:ControlParameter ControlID="ProjectDropdown" Name="ProjectID" PropertyName="SelectedValue" Type="Int32" />
                            </SelectParameters>
                        </asp:ObjectDataSource>
                    </InsertItemTemplate>
    ...
    ...


    Weiß jmd, wieso das nicht funktioniert?


    mfg,
    Chris
  •  03-25-2008, 20:59 193716 Antwort zu 193710

    AW: Gebundene Dropdownlisten aktualisieren

  •  03-26-2008, 11:51 193743 Antwort zu 193716

    AW: Gebundene Dropdownlisten aktualisieren

    Hallo Peter,
    Danke für die Antwort.
    Das habe ich auch schon mal versucht, bekomm aber folgenden Fehler:

    Serverfehler in der Anwendung /mmProject.
    JobDownList besitzt ein SelectedValue, das ungültig ist, weil es nicht in der Elementliste vorhanden ist.
    Parametername: value
    Beschreibung: Unbehandelte Ausnahme beim Ausführen der aktuellen Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über diesen Fehler anzuzeigen und festzustellen, wo der Fehler im Code verursacht wurde.

    Ausnahmedetails: System.ArgumentOutOfRangeException: JobDownList besitzt ein SelectedValue, das ungültig ist, weil es nicht in der Elementliste vorhanden ist.
    Parametername: value

    Quellfehler:

    Beim Ausführen der aktuellen Webanforderung wurde einen unbehandelte Ausnahme generiert. Informationen über den Ursprung und die Position der Ausnahme können mit der Ausnahmestapelüberwachung angezeigt werden.

    Stapelüberwachung:

    [ArgumentOutOfRangeException: JobDownList besitzt ein SelectedValue, das ungültig ist, weil es nicht in der Elementliste vorhanden ist.
    Parametername: value]
       System.Web.UI.WebControls.ListControl.PerformDataBinding(IEnumerable dataSource) +1826775
       System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e) +104
       System.Web.UI.WebControls.ListControl.PerformSelect() +31
       System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +70
       System.Web.UI.Control.DataBindChildren() +204
       System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +216
       System.Web.UI.Control.DataBind() +12
       System.Web.UI.Control.DataBindChildren() +204
       System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +216
       System.Web.UI.Control.DataBind() +12
       System.Web.UI.Control.DataBindChildren() +204
       System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +216
       System.Web.UI.Control.DataBind() +12
       System.Web.UI.Control.DataBindChildren() +204
       System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +216
       System.Web.UI.WebControls.DetailsView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) +2343
       System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +59
       System.Web.UI.WebControls.DetailsView.PerformDataBinding(IEnumerable data) +9
       System.Web.UI.WebControls.DetailsView.EnsureDataBound() +146
       System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +69
       System.Web.UI.Control.EnsureChildControls() +87
       System.Web.UI.Control.PreRenderRecursiveInternal() +50
       System.Web.UI.Control.PreRenderRecursiveInternal() +170
       System.Web.UI.Control.PreRenderRecursiveInternal() +170
       System.Web.UI.Control.PreRenderRecursiveInternal() +170
       System.Web.UI.Control.PreRenderRecursiveInternal() +170
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2041


    ----
    mfg,
    Chris

  •  03-26-2008, 11:54 193745 Antwort zu 193743

    AW: Gebundene Dropdownlisten aktualisieren

    Hallo Chris

    Wie / wo bindest du die Dinger?
    Ist AJAX im Spiel?


    --
    Gruss Peter
    Microsoft MVP - Visual Developer ASP / ASP.NET
    peterbucher.ch - Meine Persönliche Seite
    .NET Stammtisch Konstanz-Kreuzlingen

    ASP.NET Zone - Leitfaden für gute Postings
  •  03-26-2008, 12:05 193746 Antwort zu 193745

    AW: Gebundene Dropdownlisten aktualisieren

    Hallo Peter,
    Ajax ist nicht im Spiel.
    Ich habe in der erste DDL (Projektauswahl) AutoPostBack="True" drin. Durch den Postback soll dann die 2te DDL aktualisiert werden.
    Sollte ich denn Ajax verwenden? Damit kenn ich mich aber leider noch nicht wirklich aus :-(

    --
    mfg
    Chris
  •  02-10-2010, 1:03 215903 Antwort zu 193746

    AW: Gebundene Dropdownlisten aktualisieren

    Habe das selbe Problem! Gibt es schon etwas neues?

    Danke

  •  05-18-2010, 20:54 217338 Antwort zu 215903

    AW: Gebundene Dropdownlisten aktualisieren

    Die Lösung ist das Datasource Array in Page_PreRender neu zu laden.
    Ich hole es dazu aus einer Session Variable.

    Hier noch die Details mit einer netten GetListName Funktion welche die DDL durch ein Label ersetzen lässt.

    Nun haben sich die Stunden dafür doch ausgezahlt ;-)

     <asp:TemplateField HeaderText="ersteller" HeaderStyle-Width="120" SortExpression="ersteller_id">
                    <EditItemTemplate>
                       
                        <asp:DropDownList ID="DDL_ersteller_ed" runat="server" DataSource="<%# ArrayListMitarbeiter %>"
                            DataTextField="Text" DataValueField="Value" SelectedValue='<%# Bind("ersteller_id") %>'
                            Width="120px" />

                    </EditItemTemplate>
                  
                    <ItemTemplate>
                       
                        <asp:Label ID="Label_ersteller" runat="server" Text='<%# trim(GetListName(Eval   ("ersteller_id"),ArrayListMitarbeiter)) %>' />
                       
                    </ItemTemplate>
                   
             </asp:TemplateField>


       Public Function GetListName(ByVal id%, ByVal liste As ArrayList) As String
            'Umwandlung von Ersteller_id in Erstellername
            'um in ItemTemplate die Dropdownlist zu ersetzen
            If Not liste Is Nothing And Not IsDBNull(id) Then
                Dim item As ListItem
                For i = 0 To liste.Count - 1
                    item = liste(i)
                    If item.Value = id Then
                        Return item.Text
                    End If
                Next
            End If

            Return " "
        End Function

Als RSS Feed in XML ansehen
Powered by Community Server (Commercial Edition)