none
Status der Dropdownlist in Session speichern RRS feed

  • Allgemeine Diskussion

  • Hallo Zusammen

    ich sitze immer noch an meinen Prüfungsprojekt. Nun habe ich ein Problem mit den Dropdownlisten. Ich möchte die Stellung der Dropdownlisten über den Index in eine Sessionvariable speichern. Ich habe 2 Dropdownlisten beide sind mit Databound an eine Tabelle der datenbank gebunden.

    Hier die Xaml:

    <p>
           <asp:DropDownList ID="ddl_1" runat="server" DataSourceID="SqlDataSource_DDL2" 
               DataTextField="Gebaeude" DataValueField="GebID" AutoPostBack="True">
           </asp:DropDownList>
           <asp:DropDownList ID="ddl_2" runat="server" DataSourceID="SqlDataSource_DDL1" 
               DataTextField="Raum" DataValueField="RaumID" AutoPostBack="True">
           </asp:DropDownList>
       </p>
       <p>
           <asp:SqlDataSource ID="SqlDataSource_DDL1" runat="server" 
               ConnectionString="<%$ ConnectionStrings:RE_AntraegeConnectionString %>" 
               SelectCommand="SELECT [RaumID], [Raum], [GebID] FROM [Test_Raum] WHERE ([GebID] = @GebID)">
               <SelectParameters>
                   <asp:ControlParameter ControlID="ddl_1" DefaultValue="Unbekannt" Name="GebID" 
                       PropertyName="SelectedValue" Type="Int32" />
               </SelectParameters>
           </asp:SqlDataSource>

    Die Abfrage der Sessiondaten mache ich im PageLoad Ereignis:

    if (!Page.IsPostBack)
                {
                    ddl_1.SelectedIndex = Convert.ToInt16(gebaeude);
                    lb_1.Text = gebaeude;


                    raum = (String)Session["Raum"];
                    ddl_2.SelectedIndex = Convert.ToInt16(raum);
                    lb_2.Text = raum;


                    Session.Add("Gebaeude", gebaeude);
                    Session.Add("Raum", raum);
                }

    Das abspeichern der Session mache ich beim Click Ereignis des weiter Buttons:

    gebaeude = Convert.ToString(ddl_1.SelectedIndex);
                Session["Gebaeude"] = gebaeude;

                raum = Convert.ToString(ddl_2.SelectedIndex);
                Session["Raum"] = raum;

                Response.Redirect("About.aspx");

    Nun mein Problem beim wiederaufruf der Seite:
    Die Dropdownliste die nicht über eine Where klausel gebunden ist zeigt den richtigen ausgewählten Eintrag an, die über die Where klausel gebunden ist zeigt den nicht den ausgewählten sonder den ersten ersten Eintrag an. Die Sessionvariablen haben aber den gespeicherten Index das habe ich mir mit Labels anzeigen lassen.

    Wie kann man das Problem beseitigen.

    Vielen Dank schonmal im vorraus

    Martin Kühn


    • Bearbeitet martinkuehn Freitag, 22. Juli 2011 15:26 Schreibfehler
    • Typ geändert Stefan FalzModerator Dienstag, 11. März 2014 20:28 Thread ohne bestätigte Lösung abgeschlossen
    Freitag, 22. Juli 2011 15:10

Alle Antworten

  • Hallo Martin,

    tritt das Verhalten auch auf wenn Du Dir statt des Index der DropDown den ausgewählten Wert merkst? Es wäre bei deinem Select taktisch klüger entweder das Resultset mit ORDER BY nach einem bestimmten Kriterium zu sortieren damit die Reihenfolge der Elemente immer die selbe ist und somit dein Index immer auf den gleichen Eintrag zeigt oder eben den Wert zu speichern, so dass die DropDown auf den Wert eines Eintrags gesetzt wird. Solange du nicht ORDER BY verwendest kann theoretisch nicht garantiert sein, dass die Ergebnisse immer in der selben Reihenfolge von der Datenbank zurückgegeben werden. Die Ergebnisse werden im SQL Server afaik so schnell wie möglich ermittelt und (ohne ORDER BY) in der schnellstmöglichen Reihenfolge (also wie sie am günstigsten auf der Festplatte abgespeichert sind) zurückgegeben. Dadurch kann die Reihenfolge schonmal eine andere sein als üblich.

    Ich weiß nicht ob das Bind-Ereignis die SelectedIndex-Eigenschaft verwirft. Kann die Komponente auch direkt (nicht im Code Behind sondern in der ASPX-Datei) befüllt werden? Ich weiß gerade nicht ob sie eine entsprechende Eigenschaft anbietet. 

    Sonntag, 18. Dezember 2011 21:31