2016-07-20 3 views
0

JavaScriptを使用してクライアント側からRadGridコントロールのClientIDを取得しようとしています。クライアント側からデータをバインドできるようになります。RadLightBoxのRadLightBoxItemタグ内のRadGridのクライアントIDを見つける

RadGridはRadLightBox内に存在し、ボタンのクリックイベントに取り込まれる必要があります。 LightBoxのマークアップは次のようになります。

<telerik:RadLightBox ID="RadLightBox1" runat="server"> 
    <Items> 
     <telerik:RadLightBoxItem runat="server"> 
      <ItemTemplate> 
       <telerik:RadGrid runat="server" ID="lightbox_radgrid" AutoGenerateColumns="false"> 
        <MasterTableView> 
         <Columns> 
          <%-- Columns not shown here --%> 
         </Columns> 
        </MasterTableView> 
        <ClientSettings> 
         <ClientEvents OnCommand="window_radgrid_OnCommand" /> 
        </ClientSettings> 
        <GroupingSettings CaseSensitive="false" ShowUnGroupButton="true" /> 
       </telerik:RadGrid> 
      </ItemTemplate> 
     </telerik:RadLightBoxItem> 
    </Items> 
</telerik:RadLightBox> 

これは、私が書いた部分的なJavaScriptコードです。私はRadLIghtBoxItem要素を見つけることができましたが、RadGridを取得することができず、クライアントIDを取得できませんでした。このメソッドは、データを返すWebサービスへの呼び出しが成功したときに実行されます。

function onSucessCallThis(result, userContext, methodName) { 
      var radWindow = $find('<%= lightbox.ClientID %>'); 
      var LightBoxItems = radWindow.get_items(); 
      console.log(LightBoxItems); 
      console.log(LightBoxItems.get_count()); 
      var item = LightBoxItems.getItem(0); 
      console.log(item); //Able to fetch LightBoxItem 
      var radGrid = item.FindControl("lightbox_radgrid"); //Doesn't work 
     } 

これがRadLightBox内にradGridを持つ正しい方法であるかどうかはわかりません。このオンラインの例はあまりありません。

答えて

0

RadWindow's ContentTemplateを使用する方が簡単だと思います。ような何か:

 <telerik:RadWindow ID="RadWindow1" runat="server" Modal="true"> 
      <ContentTemplate> 
       <telerik:RadGrid ID="RadGrid1" runat="server"></telerik:RadGrid> 
      </ContentTemplate> 
     </telerik:RadWindow> 
     <script> 
      function onSucessCallThis(result, userContext, methodName) { 
       var wnd = $find("<%=RadWindow1.ClientID%>"); 
       if (!wnd.isVisible()) { 
        wnd.show(); 
       } 
       var grid = $find("<%=RadGrid1.ClientID%>"); 
       var mtv = grid.get_masterTableView(); 
       mtv.set_dataSource(result); 
       mtv.dataBind(); 
      } 
     </script> 

あなたをライトボックスを使用し続けたい場合は、Get Client-side Reference to a Control Objectの記事を確認します。要点は、DOMを簡単にループできることです。例えば、

 <telerik:RadLightBox ID="RadLightBox1" runat="server"> 
      <Items> 
       <telerik:RadLightBoxItem runat="server"> 
        <ItemTemplate> 
         <telerik:RadGrid CssClass="gridInLightbox" runat="server" ID="lightbox_radgrid" AutoGenerateColumns="false"> 

         </telerik:RadGrid> 
        </ItemTemplate> 
       </telerik:RadLightBoxItem> 
      </Items> 
     </telerik:RadLightBox> 
     <script> 
      function onSucessCallThis(result, userContext, methodName) { 
       var lightbox = $find('<%= RadLightBox1.ClientID %>'); 

       //item objects do not refer the DOM so we can use the lightbox as a parent for the traversal 
       var radGrid = $telerik.$(".gridInLightbox", lightbox.get_element())[0].control;//of course, add defensive checks 
       alert(radGrid); 
       var mtv = radGrid.get_masterTableView(); 
       mtv.set_dataSource(result); 
       mtv.dataBind(); 
      } 
     </script> 
関連する問題