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 :

[C# ASP.NET 2.0] l'évênement ModeChanged n'est jamais exécuté ?!


Sujet :

ASP.NET

  1. #1
    Membre habitué Avatar de stephane.net
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 170
    Points : 158
    Points
    158
    Par défaut [C# ASP.NET 2.0] l'évênement ModeChanged n'est jamais exécuté ?!
    Bonjour

    en cliquant sur un linkbutton contenu dans le HeaderTemplate de mon DetailsView, je change le mode de ReadOnly à Insert. Mais voilà le code que j'ai écris dans le handler ModeChanged n'est jamais exécuté ???

    ci-dessous le code de mon DetailsView :

    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
        <asp:DetailsView ID="DetailsViewHoldingAddress" runat="server"
            AutoGenerateRows="False" 
            DataKeyNames="HoldingId,AddressId"
            DataSourceID="odsHoldingAddress" 
            AllowPaging="True"
            OnModeChanged="DetailsViewHoldingAddress_ModeChanged" OnModeChanging="DetailsViewHoldingAddress_ModeChanging">
            <Fields>
                <asp:BoundField DataField="HoldingId" HeaderText="HoldingId" ReadOnly="True" SortExpression="HoldingId" Visible="False" />
                <asp:BoundField DataField="AddressId" HeaderText="AddressId" ReadOnly="True" SortExpression="AddressId" Visible="False" />
                <asp:TemplateField HeaderText="Address Name :" SortExpression="AddressName">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBoxEditAddressName" runat="server" Text='<%# Bind("AddressName") %>'></asp:TextBox>
                        <asp:RequiredFieldValidator ID="RequiredFieldValidatorEditAddressName" runat="server" ControlToValidate="TextBoxEditAddressName" Text="*" ValidationGroup="Holding" />
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBoxInsertAddressName" runat="server" Text='<%# Bind("AddressName") %>'></asp:TextBox>
                        <asp:RequiredFieldValidator ID="RequiredFieldValidatorInsertAddressName" runat="server" ControlToValidate="TextBoxInsertAddressName" Text="*" ValidationGroup="Holding" />
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="LabelItemAddressName" runat="server" Text='<%# Bind("AddressName") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="CreationDate" HeaderText="Creation Date :" SortExpression="CreationDate" ReadOnly="True" InsertVisible="False"/>
                <asp:BoundField DataField="LastUpdateDate" HeaderText="Last Update Date :" SortExpression="LastUpdateDate" ReadOnly="True" InsertVisible="False"/>
                <asp:CheckBoxField DataField="IsAvailable" HeaderText="Is Available :" SortExpression="IsAvailable" />
                <asp:TemplateField HeaderText="Street :" SortExpression="Street">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBoxEditStreet" runat="server" Text='<%# Bind("Street") %>'></asp:TextBox>
                        <asp:RequiredFieldValidator ID="RequiredFieldValidatorEditStreet" runat="server" ControlToValidate="TextBoxEditStreet" Text="*" ValidationGroup="Holding" />
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBoxInsertStreet" runat="server" Text='<%# Bind("Street") %>'></asp:TextBox>
                        <asp:RequiredFieldValidator ID="RequiredFieldValidatorInsertStreet" runat="server" ControlToValidate="TextBoxInsertStreet" Text="*"  ValidationGroup="Holding" />
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="LabelItemStreet" runat="server" Text='<%# Bind("Street") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="ZipCode :" SortExpression="ZipCode">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBoxEditZipCode" runat="server" Text='<%# Bind("ZipCode") %>'></asp:TextBox>
                        <asp:RequiredFieldValidator ID="RequiredFieldValidatorEditZipCode" runat="server" ControlToValidate="TextBoxEditZipCode" Text="*" ValidationGroup="Holding" />
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBoxInsertZipCode" runat="server" Text='<%# Bind("ZipCode") %>'></asp:TextBox>
                        <asp:RequiredFieldValidator ID="RequiredFieldValidatorInsertZipCode" runat="server" ControlToValidate="TextBoxInsertZipCode" Text="*" ValidationGroup="Holding" />
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="LabelItemZipCode" runat="server" Text='<%# Bind("ZipCode") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="City :" SortExpression="City">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBoxEditCity" runat="server" Text='<%# Bind("City") %>'></asp:TextBox>
                        <asp:RequiredFieldValidator ID="RequiredFieldValidatorEditCity" runat="server" ControlToValidate="TextBoxEditCity" Text="*" ValidationGroup="Holding" />
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBoxInsertCity" runat="server" Text='<%# Bind("City") %>'></asp:TextBox>
                        <asp:RequiredFieldValidator ID="RequiredFieldValidatorInsertCity" runat="server" ControlToValidate="TextBoxInsertCity" Text="*"  ValidationGroup="Holding" />
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="LabelItemCity" runat="server" Text='<%# Bind("City") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="State" HeaderText="State :" SortExpression="State"/>
                <asp:TemplateField HeaderText="Country :" SortExpression="Country">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBoxEditCountry" runat="server" Text='<%# Bind("Country") %>'></asp:TextBox>
                        <asp:RequiredFieldValidator ID="RequiredFieldValidatorEditCountry" runat="server" ControlToValidate="TextBoxEditCountry" Text="*"  ValidationGroup="Holding" />
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBoxInsertCountry" runat="server" Text='<%# Bind("Country") %>'></asp:TextBox>
                        <asp:RequiredFieldValidator ID="RequiredFieldValidatorInsertCountry" runat="server" ControlToValidate="TextBoxInsertCountry" Text="*" ValidationGroup="Holding" />
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="LabelItemCountry" runat="server" Text='<%# Bind("Country") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
            </Fields>
            <HeaderTemplate>
                <asp:Literal ID="LiteralAddress" runat="server" Text="Addresse(s) :" />
                &nbsp
                <asp:LinkButton ID="LinkButtonAddressNew" runat="server" Text="New" OnClick="LinkButtonAddressNew_Click" Visible="False" OnLoad="LinkButtonAddressNew_Load" />
                <asp:LinkButton ID="LinkButtonAddressCancel" runat="server" Text="Cancel" OnClick="LinkButtonAddressCancel_Click" Visible="False"/>
                <asp:LinkButton ID="LinkButtonAddressSave" runat="server" Text="Save" OnClick="LinkButtonAddressSave_Click" Visible="False"/>
            </HeaderTemplate>
            <EmptyDataTemplate>
                <asp:Literal ID="LiteralAddress" runat="server" Text="Addresse(s) :" />
                &nbsp
                <asp:LinkButton ID="LinkButtonAddressNew" runat="server" Text="New" OnClick="LinkButtonAddressNew_Click" Visible="false" OnLoad="LinkButtonAddressNew_Load" />
                <asp:LinkButton ID="LinkButtonAddressCancel" runat="server" Text="Cancel" OnClick="LinkButtonAddressCancel_Click" Visible="False"/>
                <asp:LinkButton ID="LinkButtonAddressSave" runat="server" Text="Save" OnClick="LinkButtonAddressSave_Click" Visible="False"/>           
            </EmptyDataTemplate>
            <RowStyle HorizontalAlign="Left" Width="150px" />
            <FieldHeaderStyle HorizontalAlign="Right" Width="150px" />
        </asp:DetailsView>
    ensuite le code qui provoque le changement de mode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        protected void LinkButtonAddressNew_Click(object sender, EventArgs e)
        {
            DetailsViewHoldingAddress.ChangeMode(DetailsViewMode.Insert);
        }
    et enfin le code qui n'est jamais exécuté :

    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
        protected void DetailsViewHoldingAddress_ModeChanged(object sender, EventArgs e)
        {
            switch (((DetailsView)sender).CurrentMode)
            {
                case DetailsViewMode.Edit:
                    ((LinkButton)DetailsViewHoldingAddress.FindControl("LinkButtonAddressCancel")).Visible = false;
                    ((LinkButton)DetailsViewHoldingAddress.FindControl("LinkButtonAddressSave")).Visible = false;
                    ((LinkButton)DetailsViewHoldingAddress.FindControl("LinkButtonAddressNew")).Visible = true;
                    break;
                case DetailsViewMode.Insert:
                    ((LinkButton)DetailsViewHoldingAddress.FindControl("LinkButtonAddressCancel")).Visible = true;
                    ((LinkButton)DetailsViewHoldingAddress.FindControl("LinkButtonAddressSave")).Visible = true;
                    ((LinkButton)DetailsViewHoldingAddress.FindControl("LinkButtonAddressNew")).Visible = false;
                    break;
                case DetailsViewMode.ReadOnly:
                    ((LinkButton)DetailsViewHoldingAddress.FindControl("LinkButtonAddressCancel")).Visible = false;
                    ((LinkButton)DetailsViewHoldingAddress.FindControl("LinkButtonAddressSave")).Visible = false;
                    ((LinkButton)DetailsViewHoldingAddress.FindControl("LinkButtonAddressNew")).Visible = false;
                    break;
            }
        }

    Je n'arrive pas à comprendre pourquoi je ne passe jamais dans le handler de l'évênement alors que je n'ai aucune erreur et que mon detailsview change bien de mode d'affichage...


  2. #2
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Quand tu changes le mode dynamiquement en code, l'evenement ne sera pas declenché.

    essaie de faire un databind() apres le changement du mode.

  3. #3
    Membre habitué Avatar de stephane.net
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 170
    Points : 158
    Points
    158
    Par défaut workaround
    le code que je souhaite exécuter dans l'évênement ModeChanged du DetailsView concerne la propriété Visible des LinkButton contenus dans les HeaderTemplate et EmptyDataTemplate.

    j'ai ajouté aux évênements _Load de mes LinkButton le code ci-dessous qui test la propriété CurrentMode du DetailsView avant de déterminé la valeur de leur propriété Visible :

    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
        protected void LinkButtonAddressCancel_Load(object sender, EventArgs e)
        {
            switch (DetailsViewHoldingAddress.CurrentMode)
            {
                case DetailsViewMode.Edit:
                    ((LinkButton)sender).Visible = false;
                    break;
                case DetailsViewMode.Insert:
                    ((LinkButton)sender).Visible = true;
                    break;
                case DetailsViewMode.ReadOnly:
                    ((LinkButton)sender).Visible = false;
                    break;
                default:
                    break;
            }
        }
    autrement j'avais pensé appeler directement le handler de l'évênement comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    protected void LinkButtonAddressNew_Click(object sender, EventArgs e)
        {
            DetailsViewHoldingAddress.ChangeMode(DetailsViewMode.Insert);
    DetailsViewHoldingAddress_ModeChanged(DetailsViewHoldingAddress, null);
        }
    Enfin le databind n'a aucun effet sur l'évênement Mode_Changed

  4. #4
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Je pense qu'il faut gérer la visibilité lors du click et lors de l'événement ModeChanged.

    Tu ajoute donc :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    protected void LinkButtonAddressNew_Click(object sender, EventArgs e)
        {
            DetailsViewHoldingAddress.ChangeMode(DetailsViewMode.Insert);
           ((LinkButton)sender).Visible = true; // ou autre
        }

  5. #5
    Membre habitué Avatar de stephane.net
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 170
    Points : 158
    Points
    158
    Par défaut peut être trouvé la cause...
    Merci Mehdi pour tes réponses

    je reviens souvent sur le même problème, l'évênement dans lequel je souhaite placer le code dépend aussi de lordre dans lequel les contrôls sont loadés dans la page....

    dans ce cas précis :

    1° j'ai un LinkButton qui passe le mode de mon DetailsView en mode Edit.

    2° A l'intérieur du DetailsView, dans le Template Header, j'ai un autre LinkButton qui à sa propriété Visible à True seulement si le mode du détailsView est en mode Edit.

    ex du code dans l'évênement Load du linkbutton placé dans le DetailsView :

    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
        protected void LinkButtonAddressNew_Load(object sender, EventArgs e)
        {
            switch (DetailsViewOrganizationAddress.CurrentMode)
            {
                case DetailsViewMode.Edit:
                    ((LinkButton)sender).Visible = true;
                    break;
                case DetailsViewMode.Insert:
                    ((LinkButton)sender).Visible = false;
                    break;
                case DetailsViewMode.ReadOnly:
                    if(edit_organization) ((LinkButton)sender).Visible = true;
                    else ((LinkButton)sender).Visible = false;
                    break;
                default:
                    break;
            }
        }
    Mais voilà, ce code fonctionne super sauf si le DetailsView est loadé avant que le Click du LinkButton provoquand le changement de mode soit exécuté...

    ou sauf si le mode du DetailsView ne change pas malgré la commande ChangeMode (parcequ'il se trouvait déjà dans le bon mode)...

    en faisant un DataBind comme tu me l'avais dis plus tôt le code des évênements du DetailsView sont exécutés.

  6. #6
    Membre habitué Avatar de stephane.net
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 170
    Points : 158
    Points
    158
    Par défaut conclusion
    je conclue donc pour répondre au topic...

    l'évênement ModeChanged n'est exécuté que si le mode change vraiment...!


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

Discussions similaires

  1. ASP .NET 2.0 mon fichier js n'est jamais mis en cache !
    Par hardballer dans le forum ASP.NET
    Réponses: 3
    Dernier message: 02/12/2010, 10h47
  2. [ASP.NET] Interception d'un événement "onclick"
    Par Skyou dans le forum ASP.NET
    Réponses: 2
    Dernier message: 05/05/2010, 18h19
  3. Réponses: 3
    Dernier message: 11/11/2009, 16h25
  4. Réponses: 11
    Dernier message: 19/10/2006, 16h07
  5. [VB.Net 1.1/ASP.Net/Excel] Pourquoi mon exécution de code est si lente ?
    Par calison3 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 12/08/2006, 12h41

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