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 :

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>&nbsp;</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">&nbsp;</td>
                                </tr>
                            </table>
                        </span>
                    </EditItemTemplate>
                </asp:TemplateColumn>
            </Columns>
            <HeaderStyle CssClass="dataGridheader" />
        </asp:DataGrid>
Et j'ai pour chaque évènement une procédure de définie (EditCommand, CancelCommand et UpdateCommand).

Indépendamment j'ai d'autres contrôles contenant des infos supplémentaires type :

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>
Voilà pour l'idée.
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 :

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();
                }
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
 
        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;
            }
 
        }
Je ne binde pas mon datagrid lors d'un postback (je précise) et il est en EnableViewState="true".


Quelqu'un pourrait-il m'éclairer sur ce que je fais qui n'est pas correct ?



Merci !