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

C# Discussion :

GridView et exceptions


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 64
    Points : 46
    Points
    46
    Par défaut GridView et exceptions
    Bonjour,

    J'utilise un GridView et une méthode dans ma BLL pour le mettre à jour. Je voudrais afficher un message d'erreur à l'utilisateur en cas de doublon mais je n'arrive pas à attraper l'exception au niveau de la page! Comment faire svp?


    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
     
                    <asp:GridView ID="GridViewFiltres" runat="server" DataSourceID="ObjectDataSourceFiltres" 
                        AutoGenerateColumns="False" AllowPaging="True" EnableSortingAndPagingCallbacks="false" 
                        PageSize="25" AllowSorting="True"
                        DataKeyNames="ID,Famille,Ssfamille,Classeequip,Eqtype,ServiceCode">             
                        <Columns>
                            <asp:BoundField DataField="ID" Visible="true" ReadOnly="true" SortExpression="ID" HeaderText="ID" />
                            <asp:BoundField HeaderText="Famille" DataField="FAMILLE" SortExpression="FAMILLE" ControlStyle-Width="50px" />
                            <asp:BoundField HeaderText="Sous-famille" DataField="SSFAMILLE" SortExpression="SSFAMILLE" ControlStyle-Width="50px" />
                            <asp:BoundField HeaderText="Classe" DataField="CLASSEEQUIP" SortExpression="CLASSEEQUIP" ControlStyle-Width="50px" />
                            <asp:BoundField HeaderText="Type" DataField="EQTYPE" SortExpression="EQTYPE" ControlStyle-Width="50px" />
                            <asp:BoundField HeaderText="Contrat de service par défaut" DataField="SERVICECODE" SortExpression="SERVICECODE" ReadOnly="true" />
                            <asp:TemplateField>
                                <EditItemTemplate>
                                    <asp:DropDownList runat="server" ID="ddlServiceCode" DataSourceID="ObjectDataSourceContrats" 
                                    DataTextField="FullDescription" DataValueField="ID" SelectedValue='<%# Bind("SERVICECODE") %>'></asp:DropDownList>
                                 <asp:ObjectDataSource ID="ObjectDataSourceContrats" Runat="server" TypeName="BLL.InterventionBLL"
                                    SelectMethod="GetContrats" DataObjectTypeName="BusinessObjects.ContratBO">
                                 </asp:ObjectDataSource>
                                </EditItemTemplate>
                            </asp:TemplateField>
                            <asp:CommandField ShowEditButton="True" />
                            <asp:TemplateField ShowHeader="False">
                            <ItemTemplate>
                                <asp:LinkButton ID="LinkButton1" runat="server" 
                                                CausesValidation="False" 
                                                CommandName="Delete" 
                                                OnClientClick="return confirm('Etes-vous sûr de vouloir supprimer ce filtre ?');"
                                                Text="Supprimer">
                                </asp:LinkButton>
                            </ItemTemplate>
                        </asp:TemplateField>
                        </Columns>
                        <AlternatingRowStyle BackColor="AliceBlue" />
                        <RowStyle BackColor="Azure" />
                    </asp:GridView>
             <asp:ObjectDataSource ID="ObjectDataSourceFiltres" Runat="server" TypeName="BLL.FilterBLL"
                SelectMethod="GetFilters" DeleteMethod="DeleteFilter" UpdateMethod="UpdateFilter" 
                DataObjectTypeName="BusinessObjects.FilterBO" SortParameterName="sortExpression" >
             </asp:ObjectDataSource>
    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
     
            public static void UpdateFilter(FilterBO filter)
            {
                try
                {
                    //vérifier que le filtre n existe pas deja dans la base
                    if (FiltreExiste(filter.Famille, filter.SsFamille, filter.ClasseEquip, filter.Eqtype))
                    {
                        throw new Exception("Ce filtre existe déjà!");
                    }
                    else
                    {
                        FilterDAO.UpdateFilter(filter);
                    }
                }
                catch(Exception ex)
                {
     
                }
            }
    Merci!

  2. #2
    Membre régulier Avatar de daheda
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 81
    Points : 109
    Points
    109
    Par défaut
    Bonojur, Je ne sais pas si ça pourrait t'aider
    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
     
    public static void UpdateFilter(FilterBO filter)
            {
                try
                {
                    //vérifier que le filtre n existe pas deja dans la base
                    if (FiltreExiste(filter.Famille, filter.SsFamille, filter.ClasseEquip, filter.Eqtype))
                    {
                        throw new Exception("Ce filtre existe déjà!");
                    }
                    else
                    {
                        FilterDAO.UpdateFilter(filter);
                    }
                }
                catch(Exception ex)
                {
                              //Normalement tu devrais avoir ton err là
                    LabelErr.Text+=ex.Message();
                }
            }
    ASP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <asp:Label Id="LabelErr" runat="server" ForeColor="Red"/>

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    Merci pour ta réponse daheda mais je crois que tu n'as pas saisi le problème.

    ObjectDataSource contient une propriété UpdateMethod qui exécute la méthode que j'ai indiquée et qui se trouve dans une classe.

    J'ai avancé sur le problème avec la propriété OnUpdated:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <asp:ObjectDataSource ID="ObjectDataSourceFiltres" Runat="server" TypeName="BLL.FilterBLL"
                SelectMethod="GetFilters" DeleteMethod="DeleteFilter" UpdateMethod="UpdateFilter" 
                DataObjectTypeName="BusinessObjects.FilterBO" SortParameterName="sortExpression" OnUpdated="GridViewFiltres_OnUpdated" >
             </asp:ObjectDataSource>
    Dans le code behind:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    protected void GridViewFiltres_OnUpdated(object sender, ObjectDataSourceStatusEventArgs e)
        {
            if (e.Exception != null)
            {
                ErrorMessage.Text = e.Exception.InnerException.ToString();
            }
            else
            {
                ErrorMessage.Text = "";
            }
        }
    Dans FilterBLL.cs:
    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
     
    public static void UpdateFilter(FilterBO filter)
            {
     
                //vérifier que le filtre n existe pas deja dans la base
                if (FiltreExiste(filter.Famille, filter.SsFamille, filter.ClasseEquip, filter.Eqtype))
                {
                    throw new Exception("Ce filtre existe déjà!");
                }
                else
                {
                    FilterDAO.UpdateFilter(filter);
                }
     
            }
    J'ai enlevé le try/catch car l'exception n'apparaissait pas au niveau du code behind. Mais du coup c'est plantage de mon appli car je lance une exception et que je ne l'attrape pas...

    Une idée?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    Je cherche aussi du côté de OnUpdating (avant l'update) mais toujours sans solution.

    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
     
    protected void GridViewFiltres_OnUpdating(object sender, ObjectDataSourceMethodEventArgs e)
        {
            // Retrieve the IOrderedDictionary object that contains the key field values.
            IOrderedDictionary allKeysDictionary = e.InputParameters;
            foreach (DictionaryEntry entry in allKeysDictionary)
            {
                FilterBO filtre = (FilterBO)entry.Value;
                if (FilterBLL.FiltreExiste(filtre.Famille,filtre.SsFamille,
                    filtre.ClasseEquip,filtre.Eqtype))
                {
                    //ErrorMessage.Text = "Ce filtre existe déjà!";
                    e.InputParameters.Clear();
                }
            }
        }
    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
     
    public static void UpdateFilter(FilterBO filter)
            {
                try
                {
                    if (filter != null)
                    {
                        //vérifier que le filtre n existe pas deja dans la base
                        if (FiltreExiste(filter.Famille, filter.SsFamille, filter.ClasseEquip, filter.Eqtype))
                        {
                            throw new Exception("Ce filtre existe déjà!");
                        }
                        else
                        {
                            FilterDAO.UpdateFilter(filter);
                        }
                    }
                    else
                    {
                        throw new Exception("Ce filtre existe déjà!");
                    }
                }
                catch
                {
                }
     
            }
    e.InputParameters.Clear() ne résoud pas mon pb car e.InputParameters est en lecture seule

    Quelqu'un aurait-il une piste svp?

    merci

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    C'est bon j'ai trouvé : e.Cancel = true; pour annuler l'évènement! Ainsi la méthode Update n'est pas appelée et j'affiche un message d'erreur.

    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
     
    protected void GridViewFiltres_OnUpdating(object sender, ObjectDataSourceMethodEventArgs e)
        {
            // Retrieve the IOrderedDictionary object that contains the key field values.
            IOrderedDictionary allKeysDictionary = e.InputParameters;
            foreach (DictionaryEntry entry in allKeysDictionary)
            {
                FilterBO filtre = (FilterBO)entry.Value;
                if (FilterBLL.FiltreExiste(filtre.Famille,filtre.SsFamille,
                    filtre.ClasseEquip,filtre.Eqtype))
                {
                    ErrorMessage.Text = "Ce filtre existe déjà!";
                    e.Cancel = true;
                }
            }
        }

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

Discussions similaires

  1. exception avec pagination sur gridview
    Par intissar_g dans le forum ASP.NET
    Réponses: 16
    Dernier message: 27/07/2011, 17h31
  2. Exception lors d'une supression dans un GridView
    Par LhIaScZkTer dans le forum ASP.NET
    Réponses: 1
    Dernier message: 18/06/2008, 17h57
  3. GRIDVIEW DATABINDING - Interception des exceptions
    Par pitbulle dans le forum ASP.NET
    Réponses: 2
    Dernier message: 18/06/2007, 11h54
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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