Datagrid, EditCommand et PostBack
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:
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> |
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:
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:
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:
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 !