2016-05-26 5 views
0

1つの.aspxページにTelerik RadGridコンポーネントが含まれている内部アプリケーションを変更しています。asp:個々のRadGrid行のUpdatePanel

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> 

私は反対に、行全体がドロップダウンがでているだけで、セルに更新することができるように、私は効果的RadGridの行をラップするためのUpdatePanelを使用することができますどのように思ったんだけど。私が試してみました既にタグの配置を持っていますが、私はTelerikに新しいので、あまり手がかりにはなりません。

マークアップのどのレベルで、私が望むようにこれを動作させるためにUpdatePanelを配置できますか?

これを行うTelerikの方法はありますか?

グリッド全体をラップすることもできますが、可能であれば、グリッド全体の更新を各部分的なポストバックで行うのではなく、許容される操作が行レベルに制限されています。

答えて

1

各行にUpdatePanelを配置することはできません。初心者の方には、これを行うための規定はありません(標準のGridViewで行うことはできません)。次に、<table>内の要素と<tr>ノードの間に<div>要素を含めることができないため、無効なマークアップが発生します(レンダリングイベントをオーバーライドするなど)。

パフォーマンスに関する1つの注意点 - 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> 
    
  • OR、クライアント側のコードとjQueryを使用しています。コンボはデータを返すWebServiceまたはPageMethodを呼び出すことができ、jQueryを使用してDOMをトラバースし、他の要素(テキストボックス、ドロップダウンなど)を更新できます。これはより困難になるだろう。

+0

こんにちは、お返事ありがとうございます。あなたは私が恐れていたことを確認しました、UpdatePanelで行をラップするのは難しい/不可能です。私は他のアプローチを見つけなければならず、あなたが提示した2つのオプションを調査します。 –

関連する問題