Bonjour
J'ai un problème qui me prend le chou, et je n'arrive pas à le résoudre.
Le ibNameEdit_Click est correctement appelé et on passe bien en mode édition, mais par contre les méthodes ibNameOK_Click (validation de la saisie) et ibNameNOK_Click (annulation de la saisie) ne sont jamais appelés, et pourtant le postback a bien lieu on repasse en mode ReadOnly.
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 html: <asp:FormView ID="fvName" runat="server" OnDataBound="fvName_DataBound" HorizontalAlign="Center"> <ItemTemplate> <div> <asp:Label ID="lFName" runat="server" Text='<%# Bind("FName") %>' Style="font-size: x-large; font-weight: bold; color: Blue" /> <asp:Label ID="lLName" runat="server" Text='<%# Bind("LName") %>' Style="font-size: x-large; font-weight: bold; color: Blue" /> <asp:ImageButton ID="ibNameEdit" runat="server" ImageUrl="App_Themes/Default/edit20_20.png" OnClick="ibNameEdit_Click" /> </div> </ItemTemplate> <EditItemTemplate> <asp:Panel ID="panNameEdit" runat="server" DefaultButton="ibNameOK" > <asp:TextBox ID="tbFName" runat="server" Text='<%# Bind("FName") %>' Style="font-size: x-large; font-weight: bold; color: Blue; width:200px" /> <asp:TextBox ID="tbLName" runat="server" Text='<%# Bind("LName") %>' Style="font-size: x-large; font-weight: bold; color: Blue; width:200px" /> <asp:ImageButton ID="ibNameOK" runat="server" ImageUrl="App_Themes/Default/ok20_20.png" OnClick="ibNameOK_Click" /> <asp:ImageButton ID="ibNameNOK" runat="server" ImageUrl="App_Themes/Default/nok20_20.png" OnClick="ibNameNOK_Click" /> </asp:Panel> </EditItemTemplate> </asp:FormView> Code behind: protected void fvName_DataBound (object sender, EventArgs e) { c_candinfo info = (c_candinfo) fvName.DataItem; if (info != null) { this.Title = info.FName + " " + info.LName + " - Fiche Candidat"; } } protected void ibNameEdit_Click (object sender, ImageClickEventArgs e) { if (fvName.CurrentMode == FormViewMode.ReadOnly) { fvName.ChangeMode(FormViewMode.Edit); fvName.DataBind(); } } protected void ibNameOK_Click (object sender, ImageClickEventArgs e) { if (fvName.CurrentMode == FormViewMode.Edit) { c_candinfo info = (c_candinfo)fvName.DataItem; if (info != null) { TextBox tb = (TextBox)fvName.FindControl("tbLName"); if (tb != null) { info.LName = tb.Text; } tb = (TextBox)fvName.FindControl("tbFName"); if (tb != null) { info.FName = tb.Text; } } fvName.ChangeMode(FormViewMode.ReadOnly); fvName.DataBind(); } } protected void ibNameNOK_Click (object sender, ImageClickEventArgs e) { if (fvName.CurrentMode == FormViewMode.Edit) { fvName.ChangeMode(FormViewMode.ReadOnly); fvName.DataBind(); } }
En regardant plus en avant, j'ai vu que
1: lors du postback après ibNameEdit, tout se passe normalement (appel des fonctions etc.) et on arrive en mode édition.
2: Après ibNameOK, fvName.CurrentMode est à ReadOnly dans Page_Init, il passe à Edit quelque pars après fvName_DataBound, ibNameOK_Click n'est pas appelé et la page générée est en mode lecture-seule.
3: Ensuite c'est le même cirque à chaque-fois: je clique sur ibNameEdit, le CurrentMode est à ReadOnly dans Init, il passe à Edit après DataBound, ibNameEdit_Click est appelé (il ne se passe rien puisque je teste que CurrentMode soit ReadOnly) et la page générée est celle de la lecture seule.
Dans la situation 3, si j'enlève le test et que ChangeMode() est bien appelé, alors la page générée est celle de l'édition.
Je sais que ce n'est pas l'utilisation standard d'un FormView, mais j'ai déjà fait quelque chose de similaire qui fonctionnait très bien.
Autre chose bizarre : la page générée ne comporte pas la fonction __doPostBack. voici le code généré du FormView
Je ne pense pas que ça ait un rapport (j'éspère pas en tout cas) : j'ai une dizaine de formulaire du même type dans la page, plus d'autres dans des UserControl.
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 en mode lecture seule: div> <span id="ctl00_main_fvName_lFName" style="font-size: x-large; font-weight: bold; color: Blue">Forrest</span> <span id="ctl00_main_fvName_lLName" style="font-size: x-large; font-weight: bold; color: Blue">Gump</span> <input type="image" name="ctl00$main$fvName$ibNameEdit" id="ctl00_main_fvName_ibNameEdit" src="App_Themes/Default/edit20_20.png" style="border-width:0px;" /> </div> et en mode edition: <div id="ctl00_main_fvName_panNameEdit" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'ctl00_main_fvName_ibNameOK')"> <input name="ctl00$main$fvName$tbFName" type="text" value="Forrest" id="ctl00_main_fvName_tbFName" style="font-size: x-large; font-weight: bold; color: Blue; width:200px" /> <input name="ctl00$main$fvName$tbLName" type="text" value="Gump" id="ctl00_main_fvName_tbLName" style="font-size: x-large; font-weight: bold; color: Blue; width:200px" /> <input type="image" name="ctl00$main$fvName$ibNameOK" id="ctl00_main_fvName_ibNameOK" src="App_Themes/Default/ok20_20.png" style="border-width:0px;" /> <input type="image" name="ctl00$main$fvName$ibNameNOK" id="ctl00_main_fvName_ibNameNOK" src="App_Themes/Default/nok20_20.png" style="border-width:0px;" /> </div>
Bon voilà j'ai épuisé mes connaissances en la matière
Merci de votre aide
Rémi
Partager