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 :

Changement dynamique de SQLDataSource


Sujet :

ASP.NET

  1. #1
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut Changement dynamique de SQLDataSource
    Bonjour tout le monde,

    Je travaille en ASP.NET 3.0 avec C#.

    J'ai une GridView alimentée par un 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     <asp:Panel ID="Panel1" runat="server" ScrollBars="Auto" Height="450" Width="100%">
        <asp:GridView ID="gv_usersList" runat="server" AutoGenerateColumns="False"
            DataSourceID="sds_allUsers" CellPadding="4" ForeColor="#333333" GridLines="None" Height="100%" Width="100%">
            <Columns>
                <asp:BoundField DataField="CU_NOM" HeaderText="Nom" SortExpression="CU_NOM" />
                <asp:BoundField DataField="CU_PRENOM" HeaderText="Prénom" SortExpression="CU_PRENOM" />
                <asp:BoundField DataField="CU_LOGIN" HeaderText="Login" SortExpression="CU_LOGIN" />
                <asp:BoundField DataField="CU_PASSWORD" HeaderText="Mot de passe" SortExpression="CU_PASSWORD" />
                <asp:BoundField DataField="CU_MAIL" HeaderText="Email" SortExpression="CU_MAIL" />
                <asp:BoundField DataField="CU_ORIGIN" HeaderText="Type" SortExpression="CU_ORIGIN" />
                <asp:CheckBoxField DataField="CU_ACTIVE" HeaderText="Activé" SortExpression="CU_ACTIVE" />
                <asp:CommandField ButtonType="Button" ShowEditButton="True" />
            </Columns>
        </asp:GridView>
    </asp:Panel>
    <asp:SqlDataSource ID="sds_allUsers" runat="server" ConnectionString="<%$ ConnectionStrings:XXXConnectionString %>"
        SelectCommand="SELECT * FROM [CAP_UTIL] WHERE CU_ACTIVE=1 ORDER BY [CU_NOM], [CU_PRENOM]" ConflictDetection="CompareAllValues" 
        DeleteCommand="DELETE FROM [CAP_UTIL] WHERE [CU_ID] = @original_CU_ID" 
        InsertCommand="INSERT INTO [CAP_UTIL] VALUES (@CU_NOM, @CU_PRENOM, @CU_LOGIN, @CU_PASSWORD, @CU_MAIL)" OldValuesParameterFormatString="original_{0}" 
        UpdateCommand="UPDATE [CAP_UTIL] SET [CU_NOM] = @CU_NOM, [CU_PRENOM] = @CU_PRENOM, [CU_LOGIN] = @CU_LOGIN, [CU_PASSWORD] = @CU_PASSWORD, [CU_MAIL] = @CU_MAIL,[CU_ACTIVE] = @CU_ACTIVE, [CU_ORIGIN] = @CU_ORIGIN WHERE [CU_ID] = @original_CU_ID">
        <DeleteParameters>
            <asp:Parameter Name="original_CU_ID" Type="Int32" />
            <asp:Parameter Name="original_CU_NOM" Type="String" />
            <asp:Parameter Name="original_CU_PRENOM" Type="String" />
            <asp:Parameter Name="original_CU_LOGIN" Type="String" />
            <asp:Parameter Name="original_CU_PASSWORD" Type="String" />
            <asp:Parameter Name="original_CU_MAIL" Type="String" />
        </DeleteParameters>
        <UpdateParameters>
            <asp:Parameter Name="CU_NOM" Type="String" />
            <asp:Parameter Name="CU_PRENOM" Type="String" />
            <asp:Parameter Name="CU_LOGIN" Type="String" />
            <asp:Parameter Name="CU_PASSWORD" Type="String" />
            <asp:Parameter Name="CU_MAIL" Type="String" />
            <asp:Parameter Name="CU_ACTIVE" />
            <asp:Parameter Name="CU_ORIGIN" />
            <asp:Parameter Name="original_CU_ID" Type="Int32" />
            <asp:Parameter Name="original_CU_NOM" Type="String" />
            <asp:Parameter Name="original_CU_PRENOM" Type="String" />
            <asp:Parameter Name="original_CU_LOGIN" Type="String" />
            <asp:Parameter Name="original_CU_PASSWORD" Type="String" />
            <asp:Parameter Name="original_CU_MAIL" Type="String" />
            <asp:Parameter Name="original_CU_ACTIVE" />
            <asp:Parameter Name="original_CU_ORIGIN" />
        </UpdateParameters>
        <InsertParameters>
            <asp:Parameter Name="CU_NOM" Type="String" />
            <asp:Parameter Name="CU_PRENOM" Type="String" />
            <asp:Parameter Name="CU_LOGIN" Type="String" />
            <asp:Parameter Name="CU_PASSWORD" Type="String" />
            <asp:Parameter Name="CU_MAIL" Type="String" />
        </InsertParameters>
    </asp:SqlDataSource>
    Lors du démarrage de ma page, je peux modifier une ligne en cliquant sur le bouton "modifier" et enregistrer la modification sans souci.

    Problème :
    J'ai une liste de checkbox qui permettent de sélectionner un type de personne (en fait ça fait simplement appel à des vues SQL).
    En cliquant sur une de mes checkbox, je modifie le SQLDataSource sds_allUsers dans le code behind (je change juste la commande de sélection et je bind la GridView) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sds_allUsers.SelectCommand = "SELECT " + c_s_SelectFieldsList + " FROM dbo.v_inactive_users";
    gv_usersList.DataSourceID = null;
    gv_usersList.DataSource = sds_allUsers;
    gv_usersList.DataBind();
    Dès lors, lorsque je clique sur le bouton modifier de la GridView, j'ai droit à cette erreur :
    Le GridView 'gv_usersList' a déclenché un événement RowEditing qui n'était pas géré.
    Comme si on avait modifié mon SQLDataSource alors que, dans l'inspecteur d'objet, toutes les propriétés semblent OK (notamment la méthode UpdateCommand qui contient toujours la même chaine de caractères (voir code ASP.NET ci-dessus)) .

    Pourquoi ai-je ce comportement ? Comment le résoudre ?

    NB : je n'ai aucun autre code behind qui puisse modifier quoi que se soit.

    Merci d'avance à tous ceux qui pourront m'apporter une once d'aide

  2. #2
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    Pk tu mets DAtaSourceID = null?

  3. #3
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    C'est du préventif : tu ne peux pas affecter les 2 valeurs DataSource et DataSourceID sinon tu as une erreur.

    Donc je préfère à chaque fois affecter à null pour ne pas avoir de problème dans les futures éventuelles évolutions.

  4. #4
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    Le probleme ne viendrait pas de là?

    Sinon ce que tu peux faire, c'est enlever le sqldatasource ou du moins le ID par rapport au GridView et tout gérer en code behind, comme cela tu affectes la bonne source de donnée à chaque fois.
    Je pense que le probleme vient de là

  5. #5
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    Je viens de trouver la réponse : Il fallait en fait affecter l'ID et non pas le DataSource lui-même.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    gv_usersList.DataSourceID = sds_allUsers.ID;
    gv_usersList.DataSource = null;
    gv_usersList.DataBind();
    Mais je ne comprends pas pourquoi cela fonctionne et pas l'ancienne méthode

    Si tu as une idée

  6. #6
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    Ben a partir du moment ou l'ID fait le lien entre le gridview et la datasource, je pense que ce n'est pas la peine de regarder au niveau de la datasource.

    A voir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Changement dynamique de police (nfop) ?
    Par Amerok dans le forum ASP.NET
    Réponses: 2
    Dernier message: 25/06/2008, 11h42
  2. Changement dynamique de l'évènement OnClick
    Par cluis dans le forum Access
    Réponses: 3
    Dernier message: 22/03/2006, 11h30
  3. JTable et Modèle : Changement dynamique du modèle
    Par mlle lain dans le forum Composants
    Réponses: 7
    Dernier message: 10/03/2006, 10h00
  4. Changement dynamiquement de la GDB distante en local
    Par ada_b dans le forum Débuter
    Réponses: 4
    Dernier message: 18/05/2005, 13h15
  5. Changement dynamique d'une iframe
    Par davids21 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/05/2005, 13h30

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