2016-07-20 19 views
0

Ich versuche, die ClientID für ein RadGrid-Steuerelement von der Clientseite mithilfe von JavaScript abzurufen, damit ich Daten von der Clientseite an dieses binden kann .Ermitteln der Client-ID für ein RadGrid in einem RadLightBoxItem-Tag in einer RadLightBox

Das RadGrid ist in der RadLightBox vorhanden und muss bei einem Klickereignis der Schaltfläche ausgefüllt werden. Das Markup für LightBox sieht ungefähr so ​​aus.

<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> 

Dies ist der teilweise Javascript-Code, den ich geschrieben habe. Ich bin in der Lage, bis zum RadLIghtBoxItem Element zu finden, aber nicht das RadGrid und seine clientID zu holen. Diese Methode wird ausgeführt, wenn ein Aufruf an einen Webdienst erfolgreich ausgeführt wird, um die Daten zurückzugeben.

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 
     } 

Ich bin mir nicht sicher, ob dies der richtige Weg ist, eine RadGrid in einem radLightBox zu haben. Es gibt nicht viele Beispiele dafür online.

Antwort

0

Ich denke, es wird einfacher für Sie, eine RadWindow's ContentTemplate zu verwenden. Etwas wie:

 <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> 

Wenn Sie Leuchtkasten behalten möchten verwenden, überprüfen Sie die Get Client-side Reference to a Control Object Artikel. Das Wesentliche ist, dass Sie das DOM problemlos durchlaufen können, zum Beispiel:

 <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>