我有一個從LinqDataSource填充的GridView。當我更新一行時,RowCommand觸發並且更改持久化到數據庫,但不刷新網格。我在UpdatePanel中顯式調用了RowCommand處理程序中的Update(),但沒有回傳,頁面在Edit模式下就位於那裏。一旦我點擊取消,它將返回到僅查看,網格顯示新值。ASP.Net GridView - 更新行命令不恢復爲僅顯示
我懷疑GridView中有關數據源的佈線是錯誤的。儘管如此,沒有例外冒出來。下面是一個精簡的標記副本。有任何想法嗎?
<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>
的處理程序:
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);
}
}
您的YieldGridView_RowCommand和Databound事件的外觀如何? 你錯了你的onRowDataBound?只是好奇爲什麼它是editGrid_RowDataBound而不是YieldGridView_RowDataBound – Wil 2010-01-19 18:03:29
editGrid_RowDataBound在我的BasePage中被重載,並做了一些通用的格式設置。我從另一個頁面複製了所有代碼,它工作的很好。唯一不同的是,我的數據源是一個視圖,而不是表格,但是我的更新與表格不一致。 – cdonner 2010-01-19 18:14:12
考慮到這一點並沒有什麼區別,順便說一句。 – cdonner 2010-01-19 18:15:28