J'ai un GridView qui est rempli à partir d'un LinqDataSource. Lorsque je mets à jour une ligne, le RowCommand se déclenche et la modification est conservée dans la base de données, mais la grille ne s'actualise pas. Je l'ai dans un UpdatePanel et appelez explicitement Update() dans le gestionnaire RowCommand, mais il n'y a pas de publication et la page se trouve juste là en mode d'édition. Une fois que je clique sur annuler, il retournera en affichage seul et la grille affichera la nouvelle valeur. Je soupçonne que quelque chose dans le câblage de GridView concernant la source de données est faux. Aucune exception ne mijote cependant. Une copie allégée du balisage est ci-dessous. Des idées?ASP.Net GridView - Mettre à jour la commande de ligne ne revient pas à l'affichage uniquement
<asp:UpdatePanel ID="uPanel" runat="server" UpdateMode="Conditional"
EnableViewState="true" ChildrenAsTriggers="true">
<ContentTemplate>
<asp:LinqDataSource ID="YieldDataSource" runat="server"
ContextTypeName="myhDataContext" TableName="vw_drug_yields"
OnSelecting="YieldDataSource_Selecting" EnableUpdate="true" />
<asp:GridView ID="YieldGridView" runat="server" Width="900px"
OnRowDataBound="editGrid_RowDataBound"
DataSourceID="YieldDataSource" EnableViewState="true"
OnRowCommand="YieldGridView_RowCommand">
<Columns>
<asp:TemplateField HeaderText="Net Fill" ItemStyle-HorizontalAlign="Center">
<ItemTemplate><%# DataBinder.Eval(Container.DataItem, "net_fill") %>
</ItemTemplate>
<EditItemTemplate><asp:TextBox ID="tbNetFill" runat="server"
Text='<%# DataBinder.Eval(Container.DataItem, "net_fill") %>' >
</asp:TextBox></EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False" ItemStyle-Width="40px">
<ItemTemplate>
<asp:ImageButton CommandName="Edit" ID="btnEdit" SkinID="btnEdit"
runat="server" ToolTip="Edit" CausesValidation="false"/>
</ItemTemplate>
<EditItemTemplate>
<asp:ImageButton CommandName="Update" ID="btnSubmit" SkinID="btnSubmit"
runat="server" ToolTip="Save" CausesValidation="true"
CommandArgument="<%# ((GridViewRow) Container).DataItemIndex %>" />
<asp:ImageButton CommandName="Cancel" ID="btnCancel" SkinID="btnCancel"
runat="server" ToolTip="Cancel" CausesValidation="false"/>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView></ContentTemplate></asp:UpdatePanel>
Le gestionnaire:
protected void YieldGridView_RowCommand(Object sender,
GridViewCommandEventArgs e) {
if (e.CommandName == "Update") {
try {
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow gdrow = YieldGridView.Rows[index];
// do some validation and handle update
db.SubmitChanges();
YieldGridView.DataBind();
uPanel.Update();
}
catch (Exception ex) {
ShowError(this, "Error while updating yields", ex, true);
}
}
À quoi ressemblent vos événements YieldGridView_RowCommand et Databound? Avez-vous mal saisi votre onRowDataBound? Juste curieux pourquoi c'est editGrid_RowDataBound au lieu de YieldGridView_RowDataBound – Wil
editGrid_RowDataBound est surchargé dans mon BasePage et fait un formatage générique. J'ai copié tout ce code depuis une autre page où cela fonctionne très bien. La seule chose qui est différente ici est que ma source de données est une vue, pas une table, mais ma mise à jour est contre la table. – cdonner
Enlever cela ne fait pas de différence, btw. – cdonner