2012-01-24 78 views
4

我在一個updatepanel內使用GridView。 我有gridview生成的編輯和取消按鈕。updatepanel只更新第一次,然後不會再更新

我第一次點擊編輯時,gridview編輯模板顯示正常。然後,如果我點擊取消,或在另一行上編輯,沒有任何反應。似乎更新面板已停止工作。

如果我做同樣的事情,而不更新面板回發工作正常,在GridView做什麼它應該(雖然這是相當繁瑣的,因爲它刷新整個頁面,這就是爲什麼我要使用的UpdatePanel!)

 <asp:UpdatePanel ID="upSentOrders" runat="server" UpdateMode="Conditional"> 
     <ContentTemplate> 
      <asp:GridView ID="gvSentOrders" runat="server" 
         autogeneratecolumns="False" 
         allowpaging="false" 
         DataKeyNames="titxn_id" 
         AlternatingRowStyle-CssClass="gvAlternate"     
         CssClass="gvTable" 
         OnRowDataBound="addSentTotals" 
         OnRowEditing="editOrder" 
         OnRowCancelingEdit="cancelEdit"  
         OnDataBound="showSentTotals"      
         AutoGenerateEditButton="true" 
         AutoGenerateDeleteButton="false" 
         ShowFooter="true" 
         ShowHeader="true"> 
       <Columns> 
        <asp:TemplateField> 
         <HeaderTemplate> 
          <table class="basketHeader"> 
           <tr> 
            <td class="basketTitle"><asp:Label ID="lblTitle" runat="server" Text="Order Date" /></td> 
            <td class="basketPX"><asp:Label ID="lblPXOffer" runat="server" Text="Part Ex" /></td> 
            <td class="basketCash"><asp:Label ID="lblCashOffer" runat="server" Text="Cash" /></td> 
            <td class="basketDelete">&nbsp;</td> 
           </tr>         
          </table> 
         </HeaderTemplate> 
         <ItemTemplate> 
          <table class="basket"> 
           <tr> 
            <td class="basketTitle"><asp:Label ID="lblTitle" runat="server" Text='<%# String.Format("{0:dd MMMM yyyy}", Eval("titxn_date")) %>' /></td> 
            <td class="basketPX"><asp:Label ID="lblPXOfferItem" runat="server" Text='<%# "£" + Eval("titxn_totalpxatsend") %>' /></td> 
            <td class="basketCash"><asp:Label ID="lblCashOfferItem" runat="server" Text='<%# "£" + Eval("titxn_totalcashatsend") %>' /></td> 
            <td class="basketDelete"><asp:Button ID="btnEdit" Text="" CommandArgument="1" runat="server" CssClass="editButton" ToolTip="View Order" OnClick="viewOrder" /></td> 
           </tr>         
          </table> 
         </ItemTemplate> 
         <EditItemTemplate> 
          <table class="basket"> 
           <tr> 
            <td class="basketTitle"><asp:Label ID="lblTitle" runat="server" Text='<%# String.Format("{0:dd MMMM yyyy}", Eval("titxn_date")) %>' /></td> 
            <td class="basketPX"><asp:Label ID="lblPXOfferItem" runat="server" Text='<%# "£" + Eval("titxn_totalpxatsend") %>' /></td> 
            <td class="basketCash"><asp:Label ID="lblCashOfferItem" runat="server" Text='<%# "£" + Eval("titxn_totalcashatsend") %>' /></td> 
            <td class="basketDelete"><asp:Button ID="btnStopEdit" Text="" CommandArgument="-1" runat="server" CssClass="stopEditButton" ToolTip="View Order" OnClick="viewOrder" /></td> 
           </tr>         
           <tr> 
            <td colspan="4"> 
             Items GridView here... 
            </td> 
           </tr> 
           <tr> 
            <td colspan="4"> 
             <asp:Label ID="lblAddress" runat="server" Text='<%# Eval("titxn_name") + ", " + Eval("titxn_addressnumber") + " " + Eval("titxn_addressone") + ", " + Eval("titxn_addresstown") + ", " + Eval("titxn_addresscounty") + ", " + Eval("titxn_addresscountry") + ", " + Eval("titxn_addresspostcode") + "." %>' /> 
            </td> 
           </tr> 
          </table>       
         </EditItemTemplate> 
         <FooterTemplate> 
          <table class="basketTotals"> 
           <tr> 
            <td class="basketTitle">Total Still To Arrive</td> 
            <td class="basketPX"><asp:Label ID="lblPxTotal" runat="server" Text="" /></td> 
            <td class="basketCash"><asp:Label ID="lblCashTotal" runat="server" Text="" /></td> 
            <td class="basketDelete">&nbsp;</td> 
           </tr>         
          </table>     
         </FooterTemplate> 
        </asp:TemplateField> 
       </Columns> 
       <EmptyDataTemplate> 
        <p>There is no orders still being processed. Look like we've already completed all the orders you've sent us!</p> 
       </EmptyDataTemplate> 
      </asp:GridView>  
     </ContentTemplate> 
    </asp:UpdatePanel> 

後面的代碼....

protected void editOrder(object sender, GridViewEditEventArgs e) 
{ 
    gvSentOrders.EditIndex = e.NewEditIndex; 
    bindSentGridView(); 
} 

protected void cancelEdit(object sender, GridViewCancelEditEventArgs e) 
{ 
    gvSentOrders.EditIndex = -1; 
    bindSentGridView(); 
} 

任何想法,將是一個很大的幫助。 謝謝。

+0

它可能會默默地失敗。你有沒有調試過,以檢查是否第二次到達後面的代碼以及發生了什麼? –

+0

它看起來很好地貫穿一切,只是沒有在最後更新。如果更新面板也被取出,這一切都可以正常工作。 –

+0

您是否收到任何Javascript錯誤? – H27studio

回答

4

這是來自另一位停止AJAX更新面板的代碼的JS錯誤。

+0

UpdatePanel的幫助和調試消息仍然接近(如果不是完全)不存在的話。感謝您指出我正確的方向。 –

0

只是做一個測試:

<asp:UpdatePanel ID="upSentOrders" runat="server" 
       UpdateMode="Conditional" 
       ChildrenAsTriggers="true"> 

確保設置GridView的屬性EnableSortingAndPagingCallbacks = false;

+0

謝謝Leniel。我試着玩這些設置,並沒有改變。仍然不會更新後第一個! –

+0

因此,請檢查這一個:http://stackoverflow.com/a/533277/114029我認爲這與您設置DataSource的方式有關。微軟也檢查此示例:http://msdn.microsoft.com/en-us/library/ie/bb386452.aspx –

+0

不確定有幫助。它正在進行第一次更新,所以我知道它正在按照它應該的方式工作,即使它在後面的代碼中逐步執行更新命令,但後續更新不會在屏幕上顯示。 –

2

由於在UpdatePanel有一個屬性的UpdateMode =「有條件」,則需要從每一個代碼隱藏更新回覆:

protected void editOrder(object sender, GridViewEditEventArgs e) 
{ 
    gvSentOrders.EditIndex = e.NewEditIndex; 
    bindSentGridView(); 
    upSentOrders.Update(); 
} 

protected void cancelEdit(object sender, GridViewCancelEditEventArgs e) 
{ 
    gvSentOrders.EditIndex = -1; 
    bindSentGridView(); 
    upSentOrders.Update(); 
} 

希望這會有所幫助。

+0

謝謝Aleafonso。我也嘗試過,它沒有任何區別。它遍歷upSentOrders.Update(),但不在屏幕上實際刷新。除非它確實和gridview editindex由於某種原因沒有改變......雖然我不明白爲什麼會發生這種情況! –

+0

好的。那麼很難找出原因。我只是猜測:如果此UpdatePanel包含在其他UpdatePanel中,則需要在代碼隱藏中更新它們兩個。否則,恐怕我不能想到其他任何東西 – aleafonso