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 :

Comment valider un EditItemTemplate dans une GridView liée à un ObjecDataSource ?


Sujet :

ASP.NET

  1. #1
    Membre éclairé Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Par défaut Comment valider un EditItemTemplate dans une GridView liée à un ObjecDataSource ?
    Bonjour,


    J'ai une GridView bindée à un ObjectDataSource.
    Dans les colonnes de la GridView, j'ai quelques BoundFields liés aux propriétés de l'objet défini dans la propriété DataObjectTypeName de l'ObjectDataSource.
    Et j'ai un TemplateField pour Editer les données de l'objet.


    ObjectDataSource

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <asp:ObjectDataSource ID="CriteriasDataSource" runat="server" 
            TypeName = "ObjetDataSourceBindingClass"
            DataObjectTypeName = "BusinessLayer.BusinessClasses.Criteria"
            SelectMethod = "GetFreeCriterias"
            UpdateMethod = "UpdateCriteria"
            OnUpdating = "CriteriasDataSource_Updating">
     
            <SelectParameters>
                <asp:Parameter Type="String" Direction="Input" Name="ContainValue"/>
            </SelectParameters>
     
    </asp:ObjectDataSource>

    Colonnes de ma GridView bindée

    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
     <Columns>
                <asp:BoundField HeaderText="ID" DataField="idCriteria" ReadOnly="true"/>
                <asp:BoundField HeaderText="Critère" DataField="libCriteria" />
                <asp:BoundField HeaderText="Nom court" DataField="shortlibCriteria" />
     
                <asp:TemplateField ShowHeader="False" meta:resourcekey="TemplateField1">
                        <ItemTemplate>
                            <asp:ImageButton ID="imgSelect" runat="server" CausesValidation="False" 
                                CommandName="Edit"
                                ImageUrl="~/images/iconEdit.png" Text="Sélectionner" 
                                meta:resourcekey="imgSelect" />
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:ImageButton ID="imgUpdate" runat="server" CausesValidation="false"
                                CommandName="Update"
                                ImageUrl="~/images/iconSave.png" Text="Enregistrer" 
                                meta:resourcekey="imgUpdate" />
                            <asp:ImageButton ID="imgCAncel" runat="server" CausesValidation="False" 
                                CommandName="Cancel"
                                ImageUrl="~/images/iconCancel.png" Text="Annuler" 
                                meta:resourcekey="imgCancel" />
                        </EditItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField ShowHeader="False" meta:resourcekey="TemplateField1">
                        <ItemTemplate>
                            <asp:ImageButton ID="imgHistories" runat="server" CausesValidation="False" 
                                CommandName="Histories"
                                ImageUrl="~/images/iconProject.png" Text="Archives" 
                                meta:resourcekey="imgSelect" />
                        </ItemTemplate>
     
                </asp:TemplateField>
     
           </Columns>
    J'aimerais valider les données avant d'effectuer l'édition de données (appui sur le bouton Update)
    Plus précisément, je veux valider la propriété 'libCriteria' de mon objet.
    Je veux utiliser un CustomValidator.

    Comment faire cela avec un CustomValidator, vu qu'il faut définir un ControlToValidate à cet objet et que dans ce cas je n'ai aucun contrôle disponible correspondant à la propriété 'libCriteria' ?

    Merci de votre aide.

  2. #2
    Membre éclairé Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Par défaut
    J'ai eu ma réponse à ce lien : http://msdn.microsoft.com/fr-fr/library/bb426882.aspx

    En gros ce qu'il faut faire :


    0. J'ai rajouter une propriété IsValidLibCriteria, booléen, à mon objet source. (Objet désigné dans la propriété DataObjectTypeName de mon objectDataSource)

    1. Convertir le BoundField à valider en TemplateField
    (En mode Design, cliquer sur le gridView, cliquer sur le smart tag du GridView, Edit Columns, cliquer sur le Boundfield à convertir, Convert this field into a TemplateField)

    2. Dans notre TemplateField nouvellement créée, dans la EditItemTemplate, on obtient donc une textbox.
    C'est cette textbox que l'on va pouvoir valider

    3. On rajoute un CustomValidator avec pour propriété ControlToValidate cette textbox.
    Une petite technique que j'utilise pour 'isoler' le customValidator : => ne pas oublier de définir sa propriété GroupValidation (mettre n'importe quoi). Cela évite que l'évènement de validation ne soit appelé à chaque PostBack.

    4. Je rajoute l'évènement RowCommand pour ma GridView. Mon bouton Update possède sa propriété CommandName="Update". Dans l'évènement RowCommand

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    protected void gVCriterias_RowCommand(object sender, GridViewCommandEventArgs e)
        {
     
            if (e.CommandName == "Update") 
            {
                ImageButton ib = e.CommandSource as ImageButton;
                DataControlFieldCell dcfc = ib.Parent as DataControlFieldCell;
                GridViewRow gvr = dcfc.Parent as GridViewRow;
                CustomValidator cv = gvr.FindControl("customValidatortxtLibCriteriaForUpdate") as CustomValidator;
     
                cv.Validate();
            }
     
        }
    La ligne va appeler l'évènement de validation ServerValidate de mon objet CustomValidator.


    5. Ensuite dans l'évènement OnUpdating de mon objectDataSource, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    protected void CriteriasDataSource_Updating(object source, ObjectDataSourceMethodEventArgs e)
        {
     
            Criteria a_Criteria = (Criteria)e.InputParameters[0];
            // ...
            a_Criteria.isValidLibCriteria = Page.IsValid;
        }
    6. Enfin dans la méthode définie par la propriété UpdateMethod de mon ObjectDataSource :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void UdpateCriteria(Criteria a_Criteria)
        {
            if (a_Criteria.isValidLibCriteria == true)
            {
               // Update en base de donnée
            }
        }

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

Discussions similaires

  1. Comment Afficher un Combobox dans une Gridview WPF avec le code seulement?
    Par aminems dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 25/08/2010, 13h48
  2. Réponses: 5
    Dernier message: 15/03/2007, 10h08
  3. Réponses: 1
    Dernier message: 08/09/2006, 18h23
  4. Réponses: 2
    Dernier message: 08/02/2006, 21h22
  5. Comment modifier un champ dans une table liée ?
    Par HookerSeven dans le forum Access
    Réponses: 11
    Dernier message: 05/02/2006, 23h50

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