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 :

Problème avec un DetailView et un ObjectDataSource


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Par défaut Problème avec un DetailView et un ObjectDataSource
    Bonjour,
    Je sollicite votre aide car je rencontre une difficulté lorsque je veux exécuter un UPDATE ou un INSERT. J’ai développé mon application en couche (DAL, BO, BLL, GUI). Mon problème survient lorsque ma GUI appelle une méthode de ma BLL. En effet un paramètre n’est pas pris en compte (« int id_group » dans les méthodes « UpdateUser » et « AddUser » de ma classe « UsersManager »).
    Je vous joins un exemple simple que j’ai créé à partir de mon projet ici :
    http://pcsicheat.free.fr/Gestion_TODO.zip

    Il se compose de 2 classes simples « User » et « Group » où chaque utilisateur appartient à un groupe.



    Ma page « Test.aspx » contient un Gridview qui possède comme source de données un ObjectDataSource me permettant de récupérer ma liste d’utilisateurs ainsi qu’un bouton sélectionner. Quand on clique sur celui-ci, il rempli un DetailView possédant des boutons Modifier, Supprimer, Nouveau. C’est a ce moment quand j’essaye d’ajouter un utilisateur ou d’en modifier un que je me rends compte que mon paramètre « id_group » correspondant a « Son_Group.Id » n’est pas pris en compte et est mis à sa valeur par défaut 0. Si je le modifie en mode débogage l’ajout ou la modification s’effectue bien.

    Est-ce que quelqu’un arrive à voir d’où vient mon problème et m’expliquer la manipulation à faire pour le corriger ?

  2. #2
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 194
    Par défaut
    J'ai pas bien saisi ton problème

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Par défaut
    Désolé, j'ai fait quelque capture d'écran pour essayer d'être plus clair.

    J’exécute ma page Test.aspx, et je clique sur le bouton « Sélectionner » de mon GridView, afin de remplir mon DetailView.



    Là je clique sur « Modifier ».



    Je mets une nouvelle valeur pour le champ Name, puis je clique sur « Mettre à jour ».



    J’ai placé un point d’arrêt dans mon code et on voit que le paramètre « son_group » de la méthode « UpdateUser » de la classe « UsersManager » est à 0 au lieu de 4. La seule différence entre les attributs « Son_Group » et « Id » de ma classe « User » est que l’un est un objet « Group » et que l’autre est du type « int ». Cependant la valeur que je veux récupérer « Son_Group.Id » est bien un entier.



    En le mettant à 4 manuellement, l’exécution de la suite du code s’effectue bien. Et je peux voir que mon UPDATE à bien été fait.



    Voilà le code source de ma page Test.aspx :

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Test</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <table>
                <tr>
                    <td style="width: 43px; height: 250px">
                        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False"
                            DataSourceID="ObjectDataSource1" DataKeyNames="Id" AutoGenerateSelectButton="True" CellPadding="4" ForeColor="#333333" GridLines="None">
                            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                            <AlternatingRowStyle BackColor="White" ForeColor="#284775" /><FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                            <Columns>
                                <asp:BoundField DataField="Id" HeaderText="Id" SortExpression="Id" />
                                <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
                            </Columns>
                            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                            <EditRowStyle BackColor="#999999" />
                        </asp:GridView>
                    </td>
                    <td style="width: 78px; height: 250px">
                        <asp:DetailsView ID="DetailsView2" runat="server" AutoGenerateRows="False" DataSourceID="ObjectDataSource3" CellPadding="4" ForeColor="#333333" GridLines="None">
                            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                            <CommandRowStyle BackColor="#E2DED6" Font-Bold="True" />
                            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                            <FieldHeaderStyle BackColor="#E9ECF1" Font-Bold="True" />
                            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                            <Fields>
                                <asp:BoundField DataField="Id" HeaderText="Id" SortExpression="Id" />
                                <asp:TemplateField HeaderText="Son_Group" SortExpression="Son_Group">
                                    <EditItemTemplate>
                                        <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="ObjectDataSource2"
                                            DataTextField="Id" DataValueField="Id">
                                        </asp:DropDownList>
                                    </EditItemTemplate>
                                    <InsertItemTemplate>
                                        <asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="ObjectDataSource2"
                                            DataTextField="Id" DataValueField="Id">
                                        </asp:DropDownList>
                                    </InsertItemTemplate>
                                    <ItemTemplate>
                                        <asp:Label ID="Label1" runat="server" Text='<%# Eval("Son_Group.Id") %>'></asp:Label>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
                                <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True" />
                            </Fields>
                            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                            <EditRowStyle BackColor="#999999" />
                            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                        </asp:DetailsView>
                    </td>
                </tr>
            </table>
            <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetUsers" TypeName="stdsi.rights.BLL.UsersManager" OldValuesParameterFormatString="original_{0}" DeleteMethod="DelUser" InsertMethod="AddUser" UpdateMethod="UpdateUser">
                <DeleteParameters>
                    <asp:Parameter Name="id" Type="Int32" />
                </DeleteParameters>
                <UpdateParameters>
                    <asp:Parameter Name="id" Type="Int32" />
                    <asp:Parameter Name="son_group" Type="Int32" />
                    <asp:Parameter Name="name" Type="String" />
                </UpdateParameters>
                <InsertParameters>
                    <asp:Parameter Name="id" Type="Int32" />
                    <asp:Parameter Name="son_group" Type="Int32" />
                    <asp:Parameter Name="name" Type="String" />
                </InsertParameters>
            </asp:ObjectDataSource>
            <asp:ObjectDataSource ID="ObjectDataSource2" runat="server" SelectMethod="GetGroups"
                TypeName="stdsi.rights.BLL.GroupsManager" OldValuesParameterFormatString="original_{0}"></asp:ObjectDataSource>
            <asp:ObjectDataSource ID="ObjectDataSource3" runat="server" SelectMethod="GetUser"
                TypeName="stdsi.rights.BLL.UsersManager" UpdateMethod="UpdateUser" DeleteMethod="DelUser" InsertMethod="AddUser" OldValuesParameterFormatString="original_{0}">
                <InsertParameters>
                    <asp:Parameter Name="id" Type="Int32" />
                    <asp:Parameter Name="son_group" Type="Int32" />
                    <asp:Parameter Name="name" Type="String" />
                </InsertParameters>
            <DeleteParameters >
                <asp:Parameter Name="id" Type="Int32" />
            </DeleteParameters>
                <UpdateParameters >
                    <asp:Parameter Name="id" Type="Int32" />
                    <asp:Parameter Name="son_group" Type="Int32" />
                    <asp:Parameter Name="name" Type="String" />
                </UpdateParameters>
                <SelectParameters>
                    <asp:ControlParameter ControlID="GridView1" Name="id_user" PropertyName="SelectedValue"
                        Type="Int32" DefaultValue="" />
                </SelectParameters>
            </asp:ObjectDataSource>
        </form>
    </body>
    </html>
    Mon problème, est pourquoi ce paramètre est ignoré alors que tous les autres sont automatiquement gérés et comment faire pour qu’il soit lui aussi pris en compte.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Par défaut
    Une solution à mon problème m'a été donné :

    Dans Test.aspx on ajoute « OnUpdating » et « OnInserting» pour lancer un événement avant l’update et l'insert puis on modifie les paramètres d’entrée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <asp:ObjectDataSource ID="ObjectDataSource3" runat="server" SelectMethod="GetUser"
                TypeName="stdsi.rights.BLL.UsersManager" UpdateMethod="UpdateUser" DeleteMethod="DelUser" InsertMethod="AddUser" OldValuesParameterFormatString="original_{0}" OnUpdating="ObjectDataSource3_Updating" OnInserting="ObjectDataSource3_Inserting">
    et dans la page codebehind (Test.aspx.cs) on implémente la méthode où on force le paramètre en lui affectant directement la valeur de la liste :

    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
     
        protected void ObjectDataSource3_Updating(object sender, ObjectDataSourceMethodEventArgs e)
        {
            if (e.InputParameters.Contains("son_group"))
            {
                e.InputParameters.Remove("son_group");
            }
            DropDownList ddl = (DropDownList)DetailsView2.FindControl("DropDownList1");
            e.InputParameters.Add("son_group", ddl.SelectedValue);
        }
     
        protected void ObjectDataSource3_Inserting(object sender, ObjectDataSourceMethodEventArgs e)
        {
            if (e.InputParameters.Contains("son_group"))
            {
                e.InputParameters.Remove("son_group");
            }
            DropDownList ddl = (DropDownList)DetailsView2.FindControl("DropDownList2");
            e.InputParameters.Add("son_group", ddl.SelectedValue);
        }

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 29/06/2007, 17h34
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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