2012-10-05 2 views
1

Telerik RadGrid를 사용하고 있으며 클라이언트 쪽 databind를하고 있습니다. 내가 SpatialCoordinatesKLASID의 DataNavigateUrlFields이 NULL 때 HeaderText에 = "KLAS지도"와 GridHyperLinkColumn을 숨긴 할 수 있도록하려는Telerik RadGrid를 사용하여 클라이언트 측에서 GridHyperLinkColumn을 숨기는 방법은 무엇입니까?

<telerik:RadGrid ID="radGrid_Assignments" runat="server" AllowPaging="True" AutoGenerateColumns="false" 
        AllowSorting="true" AllowFilteringByColumn="true" > 
     <PagerStyle Mode="NextPrevAndNumeric" /> 
     <MasterTableView NoMasterRecordsText="No assigments found for the search criteria."> 
      <Columns> 
       <telerik:GridHyperLinkColumn HeaderText="Customer Name" DataTextField="CustomerName" Target="_customer" 
              DataNavigateUrlFormatString="~/Modules/DataEntry/ProviderContact/Edit.aspx?id={0}" 
              DataNavigateUrlFields="CustomerID" SortExpression="cust.Name" UniqueName="cust.Name" 
              HeaderStyle-Width="200px" /> 
       <telerik:GridBoundColumn DataField="JobTitle" HeaderText="Title" HeaderStyle-Width="250px" /> 
       <telerik:GridBoundColumn DataField="ProviderName" HeaderText="Provider" HeaderStyle-Width="250px" /> 
       <telerik:GridHyperLinkColumn DataNavigateUrlFields="SurveyType,EvaluationID,SurveyID" DataNavigateUrlFormatString="~/Modules/AssignmentPortal/Evaluation/Enter{0}.aspx?EvalID={1}&sid={2}&menu=false" DataTextField="SurveyName" HeaderStyle-Width="200px" HeaderText="Survey Name" SortExpression="s.Description" Target="_survey" UniqueName="s.Description" /> 
       <telerik:GridBoundColumn DataField="ProductName" HeaderText="Product" HeaderStyle-Width="150px" /> 
       <telerik:GridBoundColumn DataField="WorkPhone" UniqueName="cust.WorkPhone" SortExpression="cust.WorkPhone" HeaderText="Work Phone" 
             HeaderStyle-Width="150px" /> 
       <telerik:GridHyperLinkColumn HeaderText="Email" DataTextField="Email" UniqueName="cust.Email" 
              DataNavigateUrlFormatString="mailto:{0}" DataNavigateUrlFields="Email" SortExpression="cust.Email" 
              HeaderStyle-Width="300px" /> 
       <telerik:GridBoundColumn DataField="NoteDateTime" HeaderText="Last Note Date" DataFormatString="{0:MM/dd/yyyy hh:mm tt}" 
             HeaderStyle-Width="150px" /> 
       <telerik:GridBoundColumn DataField="NoteText" HeaderText="Last Note" UniqueName="cln.NoteText" 
             HeaderStyle-Width="400px" /> 
      </Columns> 
     </MasterTableView> 
     <ClientSettings> 
      <DataBinding Location="/AjaxServices/SearchService" SelectMethod="GetAssignmentsSearchResults" /> 
      <ClientEvents OnCommand="showLoadingPanel" OnDataBound="OnClientDataBound" OnDataBinding="OnClientDataBinding" /> 
     </ClientSettings> 
    </telerik:RadGrid> 

: 여기 내 그리드입니다. 빈 열만 있으면 돼.

서버 측 OnItemDataBound 이벤트를 사용하는 전통적인 방법을 사용할 수 없습니다. 이것은 클라이언트 측에서로드되기 때문입니다.

어떻게하면됩니까? 당신의 도움에 미리 감사드립니다.

답변

3

코드/데모 코드로 시도해보십시오.

function DataBound(sender, args) { 

      var grid = $find("<%= RadGrid1.ClientID %>"); 
      if (grid) { 

       var IsColumnHaveData = false; 
       var MasterTable = grid.get_masterTableView(); 
       var Rows = MasterTable.get_dataItems(); 
       for (var i = 0; i < Rows.length; i++) { 
        var row = Rows[i]; 


        if (row.get_dataItem().EmployeeName != null) { 
         IsColumnHaveData = true; 
        } 

       } 


       var Columns = MasterTable.get_columns(); 
       for (var i = 0; i < Columns.length; i++) { 
        var column = Columns[i]; 
        if (column.get_uniqueName() == "EmployeeName") { 
         column.set_visible(IsColumnHaveData); 
        } 
       } 

      } 


     } 



<ClientSettings> 
      <DataBinding Location="http://localhost/WcfService1/Service1.svc" SelectMethod="GetData" 
       SortParameterType="Linq" FilterParameterType="Linq"> 
      </DataBinding> 
      <ClientEvents OnDataBound="DataBound" /> 
     </ClientSettings> 

위 코드를 링크 코드/데모 아래에 사용하십시오.

RadGrid with WCF Rest Service

는 특정 링크를 숨 깁니다.

기능 바인딩 (보낸 사람, 인수) {당신이 열 내의 하이퍼 링크 항목을 숨기고 싶어 어떤 경우

  var grid = $find("<%= RadGrid1.ClientID %>"); 
      if (grid) { 

       var IsColumnHaveData = false; 
       var MasterTable = grid.get_masterTableView(); 
       var Rows = MasterTable.get_dataItems(); 
       for (var i = 0; i < Rows.length; i++) { 
        var row = Rows[i]; 
        row.get_cell("EmployeeName").getElementsByTagName("a")[0].style.display = 'none'; 
       } 
      } 
     } 
+0

? 이 DataBound 함수에서 할 수 있습니까? – Rodney

+0

위 코드 스 니펫을 업데이트했습니다. –

0

jQuery의 onload를 통해 눈에 거슬리지 않는 JavaScript를 사용합니다. 이 jsfiddle을 확인하십시오.

제대로 작동하려면 생성 된 HTML을 분석해야합니다.

관련 문제