[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:
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) :" />
 
<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) :" />
 
<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:
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:
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... :?
:help:
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:
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é... :aie:
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. :)