updatepanel обновляет только в первый раз, затем не будет обновлять снова - PullRequest
5 голосов
/ 24 января 2012

Я использую GridView в панели обновления. У меня есть сетка, сгенерированная кнопками редактирования и отмены.

При первом нажатии кнопки «Изменить» шаблон редактирования сетки отображается нормально. Затем, если я нажму «Отмена» или отредактирую другой ряд, ничего не произойдет. Кажется, перестала работать панель обновления.

Если я делаю то же самое без панели обновления, обратная передача работает нормально, а gridview делает то, что должен (хотя он довольно громоздкий, поскольку обновляет всю страницу, поэтому я хочу использовать панель обновления!)

        <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();
}

Любые мысли очень помогли бы. Спасибо.

Ответы [ 3 ]

7 голосов
/ 02 марта 2012

Это была ошибка JS из другого бита кода, которая остановила AJAX-обновление панели.

2 голосов
/ 24 января 2012

Поскольку элемент UpdatePanel имеет свойство UpdateMode = "Conditional", его необходимо обновлять из кодовой области при каждой обратной передаче:

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 голосов
/ 24 января 2012

Просто чтобы сделать тест:

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

Убедитесь, что установлено свойство GridView EnableSortingAndPagingCallbacks = false;

...