Re-Bonjour tout le monde,
je suis encore avec mon datagrid, et maintenant, j'essaie de pouvoir modifier une ligne de mon datagrid.
j'ai un bouton modifier a la derniere colonne de mon datagrid (l'image est un crayon). et lorsque je clique dessus, j'aimerais que la ligne sélectionnée affiche des dropdownlist et des texbox pour que mon utilisateur puisse modifier la ligne. Mais malheureusement, j'ai plein de problème.
Voici mon code lorsque l'on clique sur le petit crayon:
private void datagrid_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { switch(e.CommandName) { case "Edit" : datagrid.EditItemIndex = e.Item.ItemIndex ; break; } }
alors lorsque que je clique, il ne se passe rien du tout, c'est seulement au deuxième clique que mon erreur apparaît. Pourquoi est ce que j'ai besoin de cliquer deux fois?
et en PLUS, il ne va jamais dans ma fonction d'au dessus, c'est pourtant un itemCommand lorsque je clique dessus non?
et deuxièment, lorsqu'il me donne mon erreur, il affiche ceci:
Échec du chargement de viewstate. L'arborescence du contrôle sur lequel viewstate est chargé doit correspondre à l'arborescence du contrôle qui a été utilisé pour enregistrer viewstate lors de la demande précédente. Par exemple, lors de l'ajout dynamique de contrôle, les contrôles ajoutés lors d'une publication doivent correspondre au type et à la position des contrôles ajoutés lors de la demande initiale
voici le code de mon datagrid
<asp:datagrid id="dgAllocation" runat="server" Width="358px" Height="64px" AllowPaging="True" AutoGenerateColumns="False" PageSize="3" BorderColor="LightSteelBlue"> <EditItemStyle BackColor="LightBlue"></EditItemStyle> <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle"></ItemStyle> <HeaderStyle CssClass="HEADERSTYLE"></HeaderStyle> <Columns> <asp:TemplateColumn HeaderText="Type"> <ItemTemplate> <asp:Label id="lblType" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Type") %>'></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:DropDownList id="cboDomaine" runat="server" Width="172px"> <asp:ListItem Value="RH">1</asp:ListItem> <asp:ListItem Value="Paie">2</asp:ListItem> <asp:ListItem Value="RH-Paie">3</asp:ListItem> </asp:DropDownList> </EditItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="Montant"> <ItemTemplate> <asp:Label id="lblMontant" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Montant") %>'></asp:Label> </ItemTemplate> <EditItemTemplate> </EditItemTemplate> </asp:TemplateColumn> <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="<img border=0 src="images/icon-floppy.gif">" CancelText="<img border=0 src="images/icon-pencil-x.gif">" EditText="<img border=0 src="images/Modification.gif">"></asp:EditCommandColumn> <asp:ButtonColumn Text="<img border=0 src="images/icon-delete.gif">" CommandName="Delete"></asp:ButtonColumn> </Columns> <PagerStyle NextPageText="suivant >" PrevPageText="< précédent" CssClass="PAGERSTYLE"></PagerStyle> </asp:datagrid>
Avez-vous une idée de ce qui ne fonctionne pas avec mon code?
merci de m'aider
Salut,
Si je comprends bien tu veux embarquer des contrôles dans ta grille c'est ça ?
D'abord, si tu es avec .Net 2.0, je me permets de te faire remarquer que Microsoft recommande d'utiliser GridView à la place de DataGrid. GridView. C'est le même en mieux qu'ils disent :)
Heu je crains que ça ne soit un petit peu plus compliqué. je n'ai hélas pas le temps d'entrer dans les détails, mais je t'ai trouvé deux liens qui devraient faire ton bonheur :)
http://webthingsconsidered.blogspot.com/2005/09/dropdownlist-inside-gridview-or.html
http://gridviewguy.com/ArticleDetails.aspx?articleID=169
Bonjour,
Essaye ceci :
Il faut lier les méthodes aux évènements. Dans le page load, on initialise les différentes commandes possibles (update, delete, etc.). Ainsi, une méthode précise est executée au bon moment.
pour ton erreur, je l'ai eu aussi. En fait, c'est parce que tu fais :
datagrid.EditItemIndex = e.Item.ItemIndex ;
et derrière tu ne recharges pas ton datagrid
Donc lorsque tu le fais la deuxième fois, tu lui demandes de passer dans un état dans lequel il est, d'où l'erreur.
Il faut donc, après une modification de l'attribut EditItemIndex, recharger ton datagrid