Bonjour,
Voici mon problème sous C# ASP.Net:
J'ai une page contenant divers inputs d'une part et un datagrid editable.
Mon datagrid se présente sous cette forme :
Et j'ai pour chaque évènement une procédure de définie (EditCommand, CancelCommand et UpdateCommand).
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 <asp:DataGrid runat="server" ID="listConfigValues" CssClass="dataGrid" AutoGenerateColumns="False" cellpadding="4" border="0" EnableViewState="true"> <ItemStyle CssClass="datagridRow" /> <AlternatingItemStyle CssClass="datagrigAlternateRow" /> <Columns> <asp:EditCommandColumn ButtonType="LinkButton" CancelText="Annuler" EditText="Editer" UpdateText="Valider"></asp:EditCommandColumn> <asp:TemplateColumn HeaderText="Paramètre"> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "configurationColonneLabel") %> </ItemTemplate> <EditItemTemplate> <%# DataBinder.Eval(Container.DataItem, "configurationColonneLabel") %> </EditItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="Valeur"> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "valeur").ToString().Trim() %> </ItemTemplate> <EditItemTemplate> <span runat="server" id="EditFree" visible='<%#(DataBinder.Eval(Container.DataItem, "colAutoSelectTypeId").ToString().Trim() == "") %>'> <table> <tr> <td colspan="2"> <asp:TextBox TextMode="MultiLine" Rows='<%# DataBinder.Eval(Container.DataItem, "valeur").ToString().Trim().Length / 20 %>' Width="350" ID="txtValue" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "valeur").ToString().Trim() %>'></asp:TextBox> </td> </tr> <tr> <td> <asp:Button runat="server" ID="CreateList" Text="Créer / lier liste" /> </td> <td> </td> </tr> </table> </span> <span runat="server" id="EditList" visible='<%#(DataBinder.Eval(Container.DataItem, "colAutoSelectTypeId").ToString().Trim() != "") %>'> <table> <tr> <td colspan="3"> <asp:DropDownList Width="350" ID="ddLListValues" runat="server"></asp:DropDownList> </td> </tr> <tr> <td> <%-- input type="button" onclick="javascript:DisplayModal()" class="modalInput_edit" ID="EditListButton" value="Gérer liste" rel="edit_list" />--%> <span class="falsebutton"><a href="#" rel="#EditConfig_edit_list">Ajouter un élément</a></span> </td> <td colspan="2"> </td> </tr> </table> </span> </EditItemTemplate> </asp:TemplateColumn> </Columns> <HeaderStyle CssClass="dataGridheader" /> </asp:DataGrid>
Indépendamment j'ai d'autres contrôles contenant des infos supplémentaires type :
Voilà pour l'idé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 <table runat="server" id="infoTable"> <tr> <td>Nom configuration :</td> <td colspan="2"><asp:TextBox runat="server" ID="configNom"></asp:TextBox></td> </tr> <tr> <td>Type configuration :</td> <td colspan="2"><asp:DropDownList onChange="javascript:TypeConfigListWarning()" ID="typeConfigList" runat="server" DataValueField="configurationTypeId" DataTextField="configurationTypeLabel"></asp:DropDownList></td> </tr> <tr> <td colspan="3"><asp:Button runat="server" Text="Valider" id="Valider"/></td> </tr> </table>
Mon problème est que lorsque je lance le postback de la page via le bouton "Valider", toutes les valeurs éditables dans mon datagrid sont réinitialisées (comprendre : pas seulement dans mon formulaire mais en base aussi).
Alors que je n'ai aucun appel de l'évènement UpdateCommand qui est lancé.
Afin de donner un peu plus d'infos :
Dans le page_load :
Mise à jour après validation du formulaire :
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 pageAction.Value = Request["action"]; if ((pageAction.Value == "addconfiguration") && IsPostBack) { CreateConfiguration(); } else if ((pageAction.Value == "applyconfig") && IsPostBack) { UpdateConfiguration(configId); } if (!IsPostBack) { // Retrieve & Display : edit_list.Attributes.CssStyle.Add("display", "none"); create_list.Attributes.CssStyle.Add("display", "none"); BindData(); }
Je ne binde pas mon datagrid lors d'un postback (je précise) et il est en EnableViewState="true".
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 private void UpdateConfiguration(String configId) { String confName = configNom.Text; String confType = typeConfigList.SelectedValue; String errText = ""; int outputError = 0; ws_indicateurs_base_data ws_indic = new ws_indicateurs_base_data(); DataSet dsOutput = WsDataTransformation.GetDataSetFromXmlNode(ws_indic.UpdateConfiguration(configId, confName, confType)); if (WsErrorsHandler.GetErrorMessage(dsOutput, ref errText) != 0) { debugSpan.InnerText = errText; } }
Quelqu'un pourrait-il m'éclairer sur ce que je fais qui n'est pas correct ?
Merci !
Partager