我正在对一个.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这样做?
我可以包装整个网格,但如果可能的话,我宁愿不在每个部分帖子上更新整个网格,允许的操作仅限于行级别,所以我认为完全网格更新是浪费。
答案 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并更新其他元素(文本框,下拉列表,无论你有什么)。这将更加困难。