IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Dropdownlist dans un formview + sqldatasource


Sujet :

ASP.NET

  1. #1
    Membre averti
    Inscrit en
    Février 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 38
    Par défaut Dropdownlist dans un formview + sqldatasource
    Bonjour,

    J'ai deux formview utilisés pour faire des ajout dans un gridview. Dans les formview, j'ai un dropdownlist qui permet à l'utilisateur de choisir une personne et ainsi de l'ajouter dans le gridview. Cette liste de personne est assez grosse (environ 2000) et il n'y a pas de moyen de la filtrer ou réduire pour l'instant.

    Le dropdownlist est branché sur un SQLDataSource (Stored Proc sur SQL Server). Lors de l'ouverture de la page, les deux dropdownlist sont remplient avec la liste de personnes (il y a un petit délai mais c'est ok pour l'utilisateur).

    Le problème est que le délai est aussi présent à chaque insertion à partir du formview car il y a un postback et le SQLDataSource semble aller recharger tout la liste de personnes sur le serveur(J'utilises des updatepanel partout).

    J'aimerais savoir si il y a une possibilité d'aller chercher la liste des personnes et de remplir le dropdownlist seulement une seule fois et ne jamais perdre le contenu du dropdownlist lors d'un postback et ne pas aller recharger la liste à chaque postback.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            <asp:SqlDataSource ID="sdsListePersonne" runat="server" ConnectionString="<%$ ConnectionStrings:DB_36624_hlm_ConnectionString %>"
                SelectCommand="spListePersonne" SelectCommandType="StoredProcedure" DataSourceMode="DataReader"
                OnSelecting="sdsListePersonne_Selecting"></asp:SqlDataSource>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
                    <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
                        <ContentTemplate>
                            <div style="height: 30px">
                                <asp:UpdateProgress ID="UpdateProgress3" AssociatedUpdatePanelID="UpdatePanel2" runat="server">
                                    <ProgressTemplate>
                                        <br />
                                        Traitement des données, un moment S.V.P.
                                    </ProgressTemplate>
                                </asp:UpdateProgress>
                            </div>
                            <asp:FormView ID="fvAjoutJoueurVisiteur" runat="server" DataSourceID="sdsJoueurVisiteur"
                                DataKeyNames="intIDSSJoueur" DefaultMode="Insert" ViewStateMode="Enabled">
                                <InsertItemTemplate>
                                    Joueur :
                                    <ajaxToolkit:ComboBox ID="insertddlFKintIDPersonne" runat="server" DataSourceID="sdsListePersonne"
                                        DataTextField="strNomComplet" DataValueField="intIDPersonne" SelectedValue='<%# Bind("FKintIDPersonne") %>'
                                        AutoCompleteMode="SuggestAppend" DropDownStyle="DropDownList">
                                    </ajaxToolkit:ComboBox>
                                    <br />
                                    Position :<asp:DropDownList ID="insertddlFKintIDJoueurPosition" runat="server" DataSourceID="sdsListePosition"
                                        DataTextField="strNomPosition" DataValueField="intIDJoueurPosition" SelectedValue='<%# Bind("FKintIDJoueurPosition") %>'>
                                    </asp:DropDownList>
                                    <br />
                                    <asp:Button ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert"
                                        ToolTip="Enregistrer" Text="Ajouter le joueur dans l'allignement visiteur" />
                                </InsertItemTemplate>
                            </asp:FormView>
                        </ContentTemplate>
    Je suis ouvert s'il y a d'autre solutions que d'utiliser un SQLDataSource et de faire du codebehind.

    Merci beaucoup et bonne journée !

  2. #2
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Normalement la liste est conservée dans le viewstate. Avec 2000 lignes ça doit pas être terrible... Tu connais l'autocompletion?

    Sinon, tu peux conserver cette source de données dans la mémoire de IIS pour éviter de renvoyer la requête au serveur SQL. Pour cela il faut ajouter un intermédiaire pour stocker la donnée.

    Une liste déroulante attend deux valeurs: une pour la clef (DataValueField), une autre pour le texte à afficher (DataTextField).

    La source de données peut donc être une liste de clef/valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected static IEnumerable<KeyValuePair<string, string>> MyData;
    Sur l'initialisation de la page, si cette propriété est null, alors faire une requête SQL pour aller chercher les données en base, sinon, restituer la liste telle qu'elle est.

    NB: le mot clef static est important, il va transformer ta liste déroulante en une variable disponible en permanence tant que le processus de ton application n'est pas recyclé. Elle sera préservée entre deux postback.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

Discussions similaires

  1. DropDownList dans une FormView avec SqlDataSource
    Par SoaB dans le forum ASP.NET
    Réponses: 14
    Dernier message: 11/07/2009, 23h32
  2. DropDownList Dans FormView
    Par Doom_aok dans le forum ASP.NET
    Réponses: 3
    Dernier message: 09/04/2008, 08h40
  3. Accéder a un DropDownList Dans un FormView
    Par Doom_aok dans le forum ASP.NET
    Réponses: 4
    Dernier message: 18/02/2008, 17h54
  4. [C#] DropDownList dans un Repeater
    Par boleduch dans le forum ASP.NET
    Réponses: 3
    Dernier message: 27/02/2006, 14h44
  5. [C#] DropDownList dans un Table dynamiquement
    Par Mourad dans le forum ASP.NET
    Réponses: 12
    Dernier message: 30/04/2004, 15h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo