2016-07-20 10 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> 

이것은 내가 작성한 부분적인 자바 스크립트 코드입니다. RadLIghtBoxItem 요소를 찾을 수 있지만 RadGrid를 가져올 수 없으며 clientID입니다. 이 메서드는 데이터를 반환하는 웹 서비스 호출 성공시 실행됩니다.

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>