asp:UpdatePanel в отдельных строках RadGrid

Я вношу некоторые изменения во внутреннее приложение с компонентом Telerik RadGrid на одной странице .aspx.

Каждая строка в RadGrid представляет заказ, и есть раскрывающийся список, который позволяет установить статус заказа. Изменение статуса заказа обновляет несколько других свойств заказа, которые отображаются в этой строке.

До сих пор изменение статуса заказа приводило к полной публикации страницы и повторному рендерингу. Я очень хочу изменить это на частичный пост, используя UpdatePanel. Я мог бы обернуть раскрывающийся список статуса (RadCombo) в UpdatePanel, который позаботится о фактических изменениях базы данных, которые требуются (согласно приведенному ниже примеру кода), но тогда без обновления других свойств в строке RadGrid обновления не будут представлены пользователю.

<telerik:RadGrid ID="OrdersGrid" runat="server" ...>
    <MasterTableView DataKeyNames="OrderId" AllowMultiColumnSorting="false">
        <NoRecordsTemplate ...></NoRecordsTemplate>
        <Columns>
            <telerik:GridBoundColumn ... />
            ...
            <telerik:GridTemplateColumn HeaderText="Order Status" UniqueName="OrderStatus">
                <ItemTemplate>
                    <asp:UpdatePanel runat="server">
                        <ContentTemplate>
                            <telerik:RadComboBox ID="RadOrderStatus" DataSourceID="OrderStatusDataSource" runat="server"
                                SelectedValue='<%# Bind("OrderStatus")  %>' Skin="Metro" Width="180px" DataTextField="OrderStatus"
                                DataValueField="OrderStatus" AutoPostBack="True" EnableLoadOnDemand="False" OnSelectedIndexChanged="RadOrderStatus_SelectedIndexChanged">
                            </telerik:RadComboBox>
                        </ContentTemplate>
                    </asp:UpdatePanel>
                </ItemTemplate>
            </telerik:GridTemplateColumn>
        </Columns>
        <SortExpressions>...</SortExpressions>
    </MasterTableView>
</telerik:RadGrid>

Мне интересно, как я могу использовать UpdatePanel для эффективного переноса строки RadGrid, чтобы можно было обновить всю строку, а не только ячейку, в которой находится раскрывающийся список. Я уже пробовал экспериментировать с размещением тегов, но я м новичок в телерике и поэтому не очень в курсе.

На каком уровне разметки я могу разместить UpdatePanel, чтобы это работало так, как мне хотелось бы?

Или есть способ Telerik сделать это?

Я мог бы обернуть всю сетку, но если возможно, я бы предпочел не обновлять всю сетку для каждой частичной публикации, разрешенные операции ограничены уровнем строки, поэтому я считаю полное обновление сетки расточительным.


person A. Murray    schedule 26.05.2016    source источник


Ответы (1)


Вы не можете размещать UpdatePanel вокруг каждой строки. Во-первых, для этого нет возможности (вы также не можете сделать это со стандартным GridView). Затем, если вам удастся это сделать (например, переопределить событие Render), вы получите недопустимую разметку, потому что у вас не может быть <div> элементов внутри <table> и между другими <tr> узлами.

Одно замечание о производительности: запрос AJAX заставит страницу пройти весь жизненный цикл на сервере, поэтому весь код будет выполняться снова, а также будут выполняться любые трудоемкие операции. Единственная разница между AJAX и полной обратной передачей заключается в том, что обрабатывается и возвращается в ответе, так что вы экономите только время сети.

Что вы можете сделать, так это следующее:

  • обернуть всю сетку. Я бы использовал RadAjaxPanel и RadAjaxLoadingPanel, чтобы у вас был красивый индикатор загрузки. Что-то типа:

        <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Skin="Black"></telerik:RadAjaxLoadingPanel>
        <telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server" LoadingPanelID="RadAjaxLoadingPanel1">
            <telerik:RadGrid ID="RadGrid1" runat="server"></telerik:RadGrid>
        </telerik:RadAjaxPanel>
    
  • ИЛИ используйте клиентский код и jQuery. Комбинация может вызвать WebService или PageMethod, который вернет данные, и вы можете использовать jQuery для обхода DOM и обновления других элементов (текстовых полей, раскрывающихся списков и т. д.). Это будет сложнее.

person rdmptn    schedule 31.05.2016
comment
Привет, спасибо за ответ. Вы подтвердили то, чего я опасался: сложно/невозможно обернуть строку в UpdatePanel. Мне придется найти какой-то другой подход и изучить два варианта, которые вы представили. - person A. Murray; 31.05.2016