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 :

Instancier des objets d'une FormView


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Points : 19
    Points
    19
    Par défaut Instancier des objets d'une FormView
    Bonsoir,
    J'aimerai avoir la porcédure pas à pas pour affecter une événement à un asp:Button contenu dans une FormView.

    Voici ce que j'ai fait et qui ne marche pas.
    Dans la feuille .aspx
    Ce bouton est bien dans une balise <asp:formview>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       <asp:Button ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert" 
    Text="OK" BorderWidth="1px" Width="120px" OnClick="AjouterTransaction">
       </asp:Button>
    puis le code behind

    Déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Partial Class Secretariat_Transaction
        Inherits System.Web.UI.Page
        'Déclare le bouton inclu dans le formview en tant que objet autonome
        Protected WithEvents InsertButton As System.Web.UI.WebControls.Button
    Evénement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Protected Sub AjouterTransaction()
            Response.Redirect("Retour.aspx", True)
        End Sub
    Le message d'erreur est le suivant :'Protected Sub AjouterTransaction()' does not have the same signature as delegate 'Delegate Sub EventHandler(sender As Object, e As System.EventArgs)'

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Bonsoir,

    Ton problème vient du fait que la fonction AjouterTransaction doit pouvoir prendre comme paramètre un object (en l'occurence celui qui va déclencher l'évènement) et un EventArgs (contenant les informations de ton évènement, en l'occurence pas grand chose)

    En gros, ta fonction doit avoir pour signature :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    protected void AjouterTransaction(object sender, EventArgs e);
    Tous les évènements en .NET sont calqués sur ce modèle !

    Le delegate est un pointeur vers une fonction qui a ce type de signature.

    Gouffe

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Je suis en vb.net et non en C#. Donc, j'ai passé ton code en VB.net. Et ça marche.

    Merci beaucoup. Je cherche une solution à ce problème depuis plus de 2semaines.

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Oui désolé, je suis allé trop vite

    Ravi d'avoir pu t'aider en tout cas !!

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Maintenant j'arrive à associer un événement à un objet contenu dans une formview. Mais il y a un autre problème qui se pose, je ne peux pas affecter une valeur de propriété à l'objet.

    J'essaie par exemple de spécifier une date par défaut au chargement de la page (Page_Load) pour un TextBox contenu dans un FormView.

    Voici mon code

    Côté .aspx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <td>Date de sortie :
         <asp:TextBox ID="DateSortieTextBox" runat="server" Text='<%# Bind("DateSortie") %>'>
         </asp:TextBox>
    Code behind
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Protected WithEvents DateSortieTextBox As System.Web.UI.WebControls.TextBox
    Puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    DateSortieTextBox.Text = Today
    End Sub
    Le message d'erreur cette fois-ci est :
    System.NullReferenceException: Object reference not set to an instance of an object.

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Je ne sais pas si ta méthode peut marcher. Pour ma part je me contenterais simplement, dans le Page_Load, du bout de code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If Not IsPostBack Then
        DateSortieTextBox.Text = Date.Today
    End If
    Et enlever la valeur de la propriété Text dans le code ASP.

    Normalement, ça devrait marcher de cette façon.

    La commande Bind fonctionne quand tu es lié à une base de données, ce qui n'est pas ici le cas.

    Gouffe

  7. #7
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Si, justement, le FormView qui contient mon Textbox est lié à une base de données. Et la date que je mets dans le TextBox va dans un champ de table dans la base de données. Du coup, je ne peux plus utiliser la propriété Text de mon TextBox.
    Très ennuyant.

    Question : le If Not PostBack, je le mets où, dans Page_Load ?

    J'ai enlevé le Handles Me.Load sur le Page_Load. Le message d'erreur n'apparaît plus, mais j'ai toujours pas la date dans le TextBox.

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Autant pour moi ! Je n'ai pas souvent (même jamais je dirais !) utilisé ce contrôle !

    Pour répondre à ta 1ere question, oui c'est dans le Page_Load qu'il faut mettre tout ça, mais c'est effectivement normal que tu n'aies pas accès au contrôle puisque la TextBox se situe dans un Template si je ne me trompe pas cette fois...

    Donc tu avais bien raison dès le départ, mais j'utiliserais la fonction Eval plutôt que Bind (que je ne connais pas bien d'ailleurs) et en paramètre, le nom de la colonne sur laquelle porte le binding.

    Tout ça bien sûr doit être complété par un DataBind(), mais je pense que tu l'as déjà fait.

    J'espère ne pas me tromper cette fois, j'avoue que l'ASP.NET n'est pas ma spécialité !!

    Gouffe

  9. #9
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Je suis obligé d'utiliser la foncton Bind, vu que je voudrais pouvoir faire un update sur le champ Date lié à ce TextBox (Eval est en lecture seule).
    En fait au niveau de la connexion avec la BdD, y a pas de problème. Si je mets une date, je clique sur Ok, la date est enregistrée dans la BDD.
    Ce que je veux, c'est que la date en cours soit automatique insérée dans le TextBox au chargement de la page.
    J'ai du mal à manipuler les templates.

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Je vois ce que tu veux dire...

    Pour que j'y vois tout de même plus clair, peux tu poster le code complet de ta FormView ? Ca m'aiderait à être sûr...

    Merci,

    Gouffe

  11. #11
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Ok, voici le code complet de mon FormView
    J'ai mis le InsertItemTemplate dans un Table (html).

    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
     
    <asp:FormView ID="fvwTransactCA" runat="server" DataKeyNames="NumSortie" DataSourceID="dsTransactCA"
                                DefaultMode="Insert">
                                <EditItemTemplate>
                                    NumSortie:
                                    <asp:Label ID="NumSortieLabel1" runat="server" Text='<%# Eval("NumSortie") %>'></asp:Label><br />
                                    NumUser:
                                    <asp:TextBox ID="NumUserTextBox" runat="server" Text='<%# Bind("NumUser") %>'>
                                    </asp:TextBox><br />
                                    NumDoc:
                                    <asp:TextBox ID="NumDocTextBox" runat="server" Text='<%# Bind("NumDoc") %>'>
                                    </asp:TextBox><br />
                                    DateSortie:
                                    <asp:TextBox ID="DateSortieTextBox" runat="server" Text='<%# Bind("DateSortie") %>'>
                                    </asp:TextBox><br />
                                    Rendu:
                                    <asp:CheckBox ID="RenduCheckBox" runat="server" Checked='<%# Bind("Rendu") %>' /><br />
                                    DateRetour:
                                    <asp:TextBox ID="DateRetourTextBox" runat="server" Text='<%# Bind("DateRetour") %>'>
                                    </asp:TextBox><br />
                                    <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update"
                                        Text="Update">
                                    </asp:LinkButton>
                                    <asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
                                        Text="Cancel">
                                    </asp:LinkButton>
                                </EditItemTemplate>
                                <InsertItemTemplate>
                                    <table>
                                        <tr>
                                            <td>N° sortie : <br />
                                            <asp:Label ID="lblNumSortie" runat=server Text="Numéro Auto non modifiable">
                                            </asp:Label>
                                            </td>
                                            <td>Utilisateur :
                                    <asp:DropDownList ID="NumUserTextBox" runat="server" Text='<%# Bind("NumUser") %>' 
                                    DataSourceID="dsUsers" DataTextField="nom" DataValueField="numUtilisateur" Width="153px">
                                    </asp:DropDownList>
                                            </td>
                                            <td>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>N° document :
                                    <asp:DropDownList ID="NumDocTextBox" runat="server" Text='<%# Bind("NumDoc") %>'
                                    DataSourceID="dsCourrier" DataTextField="numOrdre" DataValueField="numOrdre" Width="153px">
                                    </asp:DropDownList>
                                            </td>
                                            <td>Date de sortie :
                                    <asp:TextBox ID="DateSortieTextBox" runat="server" Text='<%# Bind("DateSortie") %>'>
                                    </asp:TextBox>
                                            </td>
                                            <td>
                                            </td>
                                        </tr>
                                    </table>
                                    <br />
                                    <asp:Button ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert"
                                        Text="OK" BorderWidth="1px" Width="120px" OnClick="AjouterTransaction">
                                    </asp:Button>
                                    <asp:Button ID="InsertCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
                                        Text="Annuler" BorderWidth="1px" Width="120px">
                                    </asp:Button>
                                </InsertItemTemplate>
                                <ItemTemplate>
                                    NumSortie:
                                    <asp:Label ID="NumSortieLabel" runat="server" Text='<%# Eval("NumSortie") %>'></asp:Label><br />
                                    NumUser:
                                    <asp:Label ID="NumUserLabel" runat="server" Text='<%# Bind("NumUser") %>'></asp:Label><br />
                                    NumDoc:
                                    <asp:Label ID="NumDocLabel" runat="server" Text='<%# Bind("NumDoc") %>'></asp:Label><br />
                                    DateSortie:
                                    <asp:Label ID="DateSortieLabel" runat="server" Text='<%# Bind("DateSortie") %>'>
                                    </asp:Label><br />
                                    Rendu:
                                    <asp:CheckBox ID="RenduCheckBox" runat="server" Checked='<%# Bind("Rendu") %>' Enabled="false" /><br />
                                    DateRetour:
                                    <asp:Label ID="DateRetourLabel" runat="server" Text='<%# Bind("DateRetour") %>'>
                                    </asp:Label><br />
                                    <asp:LinkButton ID="NewButton" runat="server" CausesValidation="False" CommandName="New"
                                        Text="New">
                                    </asp:LinkButton>
                                </ItemTemplate>
                            </asp:FormView>
    Et voici le code de SqlDataSource

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                    <asp:SqlDataSource ID="dsTransactCA" runat="server" ConnectionString="<%$ ConnectionStrings:ArchivesACEPConnectionString %>"
                        InsertCommand="INSERT INTO Transactions(NumUser, NumDoc, DateSortie) VALUES (?, ?, ?)"
                        ProviderName="<%$ ConnectionStrings:ArchivesACEPConnectionString.ProviderName %>"
                        SelectCommand="SELECT NumSortie, NumUser, NumDoc, DateSortie, Rendu, DateRetour FROM Transactions">
                    </asp:SqlDataSource>
    Merci.

  12. #12
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Je vois enfin vraiment ce que tu veux dire ! Désolé, je suis un peu lent des fois

    Bref, ton problème ne me parait pas évident, et comme je te l'ai dit, je suis loin d'être un expert en ASP.NET. Pour moi (et j'appelle d'autres personnes à donner leur avis, car ça m'intéresse aussi), la seule chose que tu peux faire, c'est intercepter l'évènement ItemInserting, et attribuer une valeur par défaut au nom du champ concerné si elle est vide. Encore mieux, attribuer une valeur par défaut directement par la base de données.

    Désolé, mais je ne vois pas mieux !

    Gouffe

  13. #13
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    J'avais pensé à mettre une valeur par défaut directement dans la base de données. Mais seulement, cette valeur ne s'affiche pas au chargement de la page dans la zone de texte liée. Le mode Insert du FormView efface complètement le contenu des TextBox.

    Je ne vois pas du tout comment attribuer une valeur par défaut sans utiliser la propriété Text qui est déjà occupé à faire du Binding.

    Là, je suis à la bourre.

    Merci Gouffe de m'avoir soutenu.
    Je vais continuer de chercher. Et si j'ai une solution, je la poste ici.

  14. #14
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Je crois que j'ai compris aussi des trucs.

    Bon, la solution que je vais te proposer va te demande un paquet de travail de recherche chiantes et fastidieuses. Mais rien d'insurmontable, je l'ai fait.

    Moi, j'ai un DetailView, ça marche quasiment pareil qu'un FormView, sauf que c'est pas souple à la présentation.

    Vu que ton FromView est un collection tu peu y acceder de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CType(FormView.Controls.Item(0).Controls(1).Controls.Item(1).Controls.Item(0), TextBox).Text
    Maintenant il faut que tu tripote les index des Item et de sControls pour trouver l'objet qui correspond à ta TextBox et avec le Ctype, tu lui colle ce que tu veux dedans.

    Mais attention, il faut lui demander sa carte d'identité et vérifier qu'elle est majeure avant de lui coller certaine chose....
    euh, pardon, je m'égare.

    Bref, bon courage.

    Kenavo
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  15. #15
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Merci Zooffy.

    Mais, j'ai jamais utilisé la fonction CType. Y a-t-il pas une déclaration à faire avant de pouvoir l'utilisé ?
    Quand j'essaie de faire comme tu m'as dit, je reçois le message suivant en infobulle :
    Expression is not a method

  16. #16
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Ah ben oui, si tu utilise la ligne de code tel que, ça peut pas marcher.
    L'exemple que je te donne permet d'accéder à la propriété Text d'un TextBox.

    Donc soit tu récupères l'info, soit tu l'enregistre.

    La ligne que je t'ai filé marche comme si tu faisais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MaTextBox.Text = "toto"
    ou 
    Dim toto as String = MaTextBox.Text
    Mais l'idée c'est plutôt que tu fasse un Debug avec un point d'arrêt sur ton FormView, histoire de te balader dans les espions pour voir les collections d'bjet, comme ça tu trouveras tout ce qu'il te faut.

    Kenavo
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  17. #17
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup, Zooffy.
    Mais alors, un très très grand merci.

    ça marche comme sur des rollers-blade. En fait j'ai compris qu'il fallait créer une variable et la convertir en l'objet auquel je souhaite accéder, à l'aide de la fonction CType.

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

Discussions similaires

  1. Stockage des objets dans une BD(InstantObject)
    Par Klemsy78 dans le forum Delphi
    Réponses: 3
    Dernier message: 29/03/2007, 20h56
  2. Dock des objets sur une fenêtre
    Par digital prophecy dans le forum Powerbuilder
    Réponses: 2
    Dernier message: 10/08/2006, 17h14
  3. Réponses: 13
    Dernier message: 09/05/2006, 16h30
  4. Réponses: 4
    Dernier message: 08/03/2006, 19h07
  5. exporter des objets d'une base vers une autre
    Par RGShoop dans le forum Access
    Réponses: 3
    Dernier message: 07/09/2005, 11h52

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