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: L'argument spécifié n'était pas dans les limites de la plage des valeurs valides


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut dropdownlist: L'argument spécifié n'était pas dans les limites de la plage des valeurs valides
    Bonjour, j'ai 3 tables:

    commande: reference (primary key), reference_projet(int), responsable (varchar(50)), acheteur (varchar(50))
    projet: reference (primary key, qui est commande.reference_projet), nom (varchar(50))
    utilisateur: nom(varchar(50)), reference_projet (int), role ('acheteur', 'responsable', 'demandeur', 'administrateur')
    et 2 pages web :
    commande: 2 dropdownlists 'responsable' & 'acheteur'
    projet: gridview de la table utilisateur (nom, reference_projet), avec la commande 'supprimer' pour chaque ligne
    Un projet peut avoir plusieurs utilisateurs avec différents rôles, plus un utilisateur 'AdminAchat' (role Administrateur) par défaut.
    Dans la page commande on peut choisir 1 responsable & 1 acheteur (pour le dropdownlist "responsable": SELECT distinct([Nom]) FROM [Utilisateur] where [Reference Projet]=@Reference_projet and (Role='Responsable' or Role='Administrateur'))
    Dans page Projet, on supprime l'utilisateur qui a été choisi dans le dropdownlist "Responsable" (ou "Acheteur") d'une commande, la commande remplace le responsable supprimé par 'AdminAchat' comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    update Commande set Responsable='ADMINACHAT' 
    where [Reference] in (select [Reference] from Commande where Responsable=@Nom and [Reference Projet]=@reference_projet) 
    update Commande set Acheteur='ADMINACHAT' 
    where [Reference] in (select [Reference] from Commande where Acheteur=@Nom and [Reference Projet]=@reference_projet)
    DELETE FROM [Utilisateur] WHERE [Nom] = @Nom and [Reference projet]=@reference_projet and @Nom <> 'ADMINACHAT'
    Le problème se pose quand je supprime 2 utilisateurs qui ont été choisi en tant que Responsable et Acheteur d'une même commande, il met :

    '"L'argument spécifié n'était pas dans les limites de la plage des valeurs valides.Nom du paramètre : value"
    c'est-à-dire:

    Ex1: Page commande: Commande 1: Responsable choisi 'A', Acheteur choisi 'AdminAchat'
    Commande 2: Responsable choisi 'AdminAchat', Acheteur choisi 'B'
    Page Projet: supprime 'A', OK. Puis supprime 'B', OK
    Ex2: Page commande: Commande 3: Responsable choisi 'A', Acheteur choisi 'B'
    Page Projet: supprime 'A', OK. Puis supprime 'B', NOK (L'argument spécifié n'était pas dans les limites de la plage des valeurs valides. Nom du paramètre : value)

    Pourquoi cette différence? Merci de vos aides

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Salut,

    ton problème semble bien posé, mais tu ne parles pas de l'essentiel. L'erreur évoquée fait penser un index hors des limites d'un tableau ou d'une collection. Comment fait tu les suppressions ?
    Ne peux tu pas mettre un point d'arrêt sur cette méthode ?

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut
    L'erreur peut éventuellement évoqué quand le dropdownlist ne trouve pas la valeur enregistré, càd si le dernier enregistrement était: Responsable = 'A' (choisi parmi 'A' ou 'Admin') et que mnt on a supprimé 'A' de la base, quand on se reconnecte à la page, il essait de chercher 'A' dans le dropdownlist Responsable & ne trouve pas.

    C'est pour cette raison que j'ai mis un update avant de supprimer (quand on supprime 'A', on met 'AdminAchat' à la place, sachant que j'ai mis un control pour qu'on ne peut pas supprimer 'AdminAchat' et donc quand on se reconnecte à la page, il ne cherche plus 'A' mais 'AdminAchat' qui existe toujours).

    Ma requete de suppression est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    update Commande set Responsable='ADMINACHAT' 
    where [Reference] in (select [Reference] from Commande where Responsable=@Nom and [Reference Projet]=@reference_projet) 
    update Commande set Acheteur='ADMINACHAT' 
    where [Reference] in (select [Reference] from Commande where Acheteur=@Nom and [Reference Projet]=@reference_projet)
    DELETE FROM [Utilisateur] WHERE [Nom] = @Nom and [Reference projet]=@reference_projet and @Nom <> 'ADMINACHAT'
    J'ai réussi avec la suppression d'un responsable (ou d'un acheteur) PAR commande, mais si je supprime ET le responsable ET l'acheteur d'une comande ca ne marche plus, alors pourquoi cette différence?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Je n'ai peut être pas été assez clair. L'erreur ne provient pas des requêtes SQL mais du code derrière C#.

    Utilises tu des datasets typés ?

    Je ré_itère ma demande de voir ton code c# pour les suppressions.

  5. #5
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut
    Je n'ai pas de code behind en C#, c'est le control delete de gridview (asp). Je ne peux pas mettre un point d'arret dans la page aspx. Je te recopie quand meme mon code asp:

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <asp:GridView ID="GridViewUtilisateur" runat="server" AllowSorting="true"
            AutoGenerateColumns="False" DataKeyNames="Nom" 
            DataSourceID="SqlDataSourceUtilisateur" >
            <Columns>
                <asp:TemplateField ShowHeader="False">
                    <ItemTemplate>
                        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" 
                            CommandName="Delete" Text="Supprimer" 
     
                            OnClientClick="if(!confirm('Voulez-vous supprimer cet utilisateur du projet?')) return false;" 
                            ForeColor="Black"></asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="Nom" HeaderText="Nom" 
                    SortExpression="Nom" />
                <asp:BoundField DataField="Role" HeaderText="Role" SortExpression="Role" />
                <asp:BoundField DataField="Reference Projet" HeaderText="Reference Projet" 
                    SortExpression="Reference Projet" />
            </Columns>
        </asp:GridView>
     
     
    <asp:SqlDataSource ID="SqlDataSourceUtilisateur" runat="server" 
                ConnectionString="<%$ ConnectionStrings:GDA_DATAConnectionString %>" 
                DeleteCommand="update Commande set Responsable='ADMINACHAT' 
    where [Reference] in (select [Reference] from Commande where Responsable=@Nom and [Reference Projet]=@reference_projet) 
     
    update Commande set Acheteur='ADMINACHAT' 
    where [Reference] in (select [Reference] from Commande where Acheteur=@Nom and [Reference Projet]=@reference_projet)
     
    DELETE FROM [Utilisateur] WHERE [Nom] = @Nom and [Reference projet]=@reference_projet and @Nom &lt;&gt; 'ADMINACHAT'" 
     
                <DeleteParameters>
                    <asp:ControlParameter ControlID="GridViewUtilisateur" Name="Nom" 
                        PropertyName="SelectedValue" Type="String" />
                    <asp:ControlParameter ControlID="GridViewProjet" Name="reference_projet" 
                        PropertyName="SelectedValue" />
                </DeleteParameters>
            </asp:SqlDataSource>

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/04/2010, 13h54
  2. Données en base mais pas dans les états!
    Par sofien dans le forum Reports
    Réponses: 4
    Dernier message: 12/12/2007, 10h44
  3. image n'apparaissant pas dans les mails
    Par jean-jacques varvenne dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 27/07/2007, 14h28
  4. Réponses: 3
    Dernier message: 30/03/2007, 14h50

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