asp:UpdatePanel 在单个 RadGrid 行上
asp:UpdatePanel on individual RadGrid rows
我正在对在一个 .aspx 页面上具有 Telerik RadGrid 组件的内部应用程序进行一些更改。
RadGrid 中的每一行代表一个订单,并且有一个允许设置订单状态的下拉菜单。更改订单状态会更新该行中显示的其他几个订单属性。
到目前为止,更改订单状态会导致完整页面 post 返回并重新呈现。我很想使用 UpdatePanel 将其更改为部分 post。我可以将状态下拉列表(一个 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 的行,以便可以更新整行而不是仅更新下拉列表所在的单元格。我已经尝试过试验标签放置,但我是 Telerik 的新手,因此不是很了解。
我可以在标记的哪个级别放置 UpdatePanel 以使其按我希望的方式工作?
或者是否有 Telerik 方法可以做到这一点?
我可以包装整个网格,但如果可能的话,我宁愿不在每个部分 post 上更新整个网格,允许的操作仅限于行级别,所以我看到一个完整的网格更新为浪费。
您不能在每一行周围放置一个 UpdatePanel。对于初学者,没有规定可以做到这一点(您也不能使用标准的 GridView 做到这一点)。然后,如果您设法做到这一点(例如,覆盖 Render 事件),您将获得无效标记,因为您不能在 <table>
内部和其他 <tr>
之间包含 <div>
元素节点。
关于性能的注意事项——AJAX 请求将使页面在服务器上经历其整个生命周期,因此所有代码将再次执行,任何耗时的操作也将被执行。 AJAX 和完整回发之间的唯一区别是在响应中呈现和 returned 的内容,因此您基本上只节省了网络时间。
您可以做的是:
包裹整个网格。我会使用 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。该组合可以调用将 return 数据的 WebService 或 PageMethod,您可以使用 jQuery 遍历 DOM 并更新其他元素(文本框、下拉列表,无论您有什么)。这会更难。
我正在对在一个 .aspx 页面上具有 Telerik RadGrid 组件的内部应用程序进行一些更改。
RadGrid 中的每一行代表一个订单,并且有一个允许设置订单状态的下拉菜单。更改订单状态会更新该行中显示的其他几个订单属性。
到目前为止,更改订单状态会导致完整页面 post 返回并重新呈现。我很想使用 UpdatePanel 将其更改为部分 post。我可以将状态下拉列表(一个 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 的行,以便可以更新整行而不是仅更新下拉列表所在的单元格。我已经尝试过试验标签放置,但我是 Telerik 的新手,因此不是很了解。
我可以在标记的哪个级别放置 UpdatePanel 以使其按我希望的方式工作?
或者是否有 Telerik 方法可以做到这一点?
我可以包装整个网格,但如果可能的话,我宁愿不在每个部分 post 上更新整个网格,允许的操作仅限于行级别,所以我看到一个完整的网格更新为浪费。
您不能在每一行周围放置一个 UpdatePanel。对于初学者,没有规定可以做到这一点(您也不能使用标准的 GridView 做到这一点)。然后,如果您设法做到这一点(例如,覆盖 Render 事件),您将获得无效标记,因为您不能在 <table>
内部和其他 <tr>
之间包含 <div>
元素节点。
关于性能的注意事项——AJAX 请求将使页面在服务器上经历其整个生命周期,因此所有代码将再次执行,任何耗时的操作也将被执行。 AJAX 和完整回发之间的唯一区别是在响应中呈现和 returned 的内容,因此您基本上只节省了网络时间。
您可以做的是:
包裹整个网格。我会使用 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。该组合可以调用将 return 数据的 WebService 或 PageMethod,您可以使用 jQuery 遍历 DOM 并更新其他元素(文本框、下拉列表,无论您有什么)。这会更难。