asp:各个RadGrid行上的UpdatePanel

时间:2016-05-26 12:51:36

标签: asp.net telerik radgrid radcombobox

我正在对一个.aspx页面上具有Telerik RadGrid组件的内部应用程序进行一些更改。

RadGrid中的每一行代表一个订单,并且有一个下拉列表,允许设置订单的状态。更改订单的状态会更新该行上显示的订单的其他几个属性。

到目前为止,更改订单状态已导致完整的页面回发并重新呈现。我热衷于使用UpdatePanel将其更改为部分回发。我可以在UpdatePanel中包装状态下拉列表(RadCombo),它将处理所需的实际数据库更改(根据下面的代码示例),但是在不更新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的行,以便可以更新整行,而不仅仅是下拉列表所在的单元格。我已尝试使用标记放置进行实验但我是Telerik的新手,因此不太了解。

在标记的哪个级别,我可以放置UpdatePanel以使其按照我的意愿运行吗?

或者是否有Telerik这样做?

我可以包装整个网格,但如果可能的话,我宁愿不在每个部分帖子上更新整个网格,允许的操作仅限于行级别,所以我认为完全网格更新是浪费。

1 个答案:

答案 0 :(得分: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并更新其他元素(文本框,下拉列表,无论你有什么)。这将更加困难。