2014-07-25 91 views
1

我在運行時根據傳入的配置構建了一個ASP.Net Telerik Radgrid,因此我的ASPX頁面上沒有radgrid標記。我試圖實現功能,我可以將一個按鈕添加到將顯示或隱藏列過濾器的網格標題。Telerik ASP.Net Radgrid顯示/隱藏篩選器

我使用的是Command Item Template是提供一種出現在顯示/隱藏按鈕,但是當我點擊該按鈕來顯示或隱藏與使用grid.get_masterTableView()功能ShowHideFilters Javascript方法過濾器無法找到對電網的get_masterTableView()方法目的。

任何想法爲什麼這種方法丟失或更好的選擇來實現我所需要的行爲?

Telerik Radgrid Client API

從Telerik的API JavaScript示例

function getMasterTableView() { 
    var grid = $find("<%=RadGrid1.ClientID %>"); 
    var masterTableView = grid.get_masterTableView();    
} 

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="ShowGrid.aspx.vb" Inherits="ShowGrid" %> 

<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 

    <form id="ShowGrid" runat="server"> 

     <telerik:RadScriptManager ID="ScriptManager" runat="server"> 
     </telerik:RadScriptManager> 

     <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> 
      <AjaxSettings> 
       <telerik:AjaxSetting AjaxControlID="ConfigureGrid"> 
        <UpdatedControls> 
         <telerik:AjaxUpdatedControl ControlID="ConfigureGrid" LoadingPanelID="AjaxLoadingPanel" /> 
        </UpdatedControls> 
       </telerik:AjaxSetting> 
      </AjaxSettings> 
     </telerik:RadAjaxManager> 

     <telerik:RadAjaxLoadingPanel ID="AjaxLoadingPanel" runat="server"/> 

     <asp:SqlDataSource ID="PrimaryDataSource" runat="server"/> 
    </form> 

    <script type="text/javascript"> 

     function ShowHideFilters() 
     { 
      var grid = document.getElementById("ConfigureGrid") 
      if (grid) 
      { 
       var masterTableView = grid.get_masterTableView(); 
       window.alert(masterTableView.id) 
      } 

      window.alert(grid.id) 
     } 

    </script> 

</body> 
</html> 

後面

012典

建立從地上爬起來電網在Page_Init

Protected Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init 

    Try 
     BuildConfiguration() 
     CreateTitleObject() 
     CreateRadFilter() 
     LoadDataSource() 
     CreateRadGrid() 
    Catch ex As Exception 
     CreateExceptionDisplay(ex) 
    End Try 

End Sub 

項目模板

Friend Class RadGridCommandItemFilterTemplate 
    Implements ITemplate 

    Protected showHideFilterButton As Button 

    Public Sub New() 
     MyBase.New() 
    End Sub 

    Public Sub InstantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn 
     showHideFilterButton = New Button 
     showHideFilterButton.EnableTheming = True 
     showHideFilterButton.ID = "showHideFilterButton" 
     showHideFilterButton.Text = "Show/Hide Filters" 
     showHideFilterButton.CommandName = "ShowHideFilters" 
     showHideFilterButton.OnClientClick = "ShowHideFilters()" 
     container.Controls.Add(showHideFilterButton) 
    End Sub 

End Class 

添加項模板

grid.MasterTableView.CommandItemTemplate = New RadGridCommandItemFilterTemplate 

回答

0

與Telerik的支持,我想出了這個幫助。

項目模板

Friend Class RadGridCommandItemFilterTemplate 
    Implements ITemplate 

    Public showHideFilter As ImageButton 
    Public bannerTitle As Label 

    Private gridClientID As String 
    Private showFilter As Boolean = False 
    Private title As String = String.Empty 

    Public Sub New() 
     MyBase.New() 
    End Sub 

    Public Sub New(gridClientID As String, showfilter As Boolean, title As String) 
     MyBase.New() 
     Me.gridClientID = gridClientID 
     Me.showFilter = showfilter 
     Me.title = title 
    End Sub 

    Public Sub InstantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn 

     If Not String.IsNullOrWhiteSpace(title) Then 
      bannerTitle = New Label With {.Text = title, .CssClass = "title"} 
      container.Controls.Add(bannerTitle) 
     End If 

     If showFilter Then 
      showHideFilter = New ImageButton With {.ID = "showHideFilter", 
               .CommandName = "ShowHideFilters", 
               .CssClass = "searchButton"} 

      showHideFilter.Attributes.Add("onclick", (Convert.ToString("setFilter('") & gridClientID) + "'); return false;") 

      container.Controls.Add(showHideFilter) 
     End If 

    End Sub 

End Class 

Java腳本的

<script type="text/javascript"> 

    function pageLoad(sender, args) { 
     setFilter('ConfigureGrid'); 
    } 

    function setFilter(gridClientID) { 
     var grid = $find(gridClientID); 
     if (grid.get_masterTableView().get_isFilterItemVisible()) { 
      grid.get_masterTableView().hideFilterItem(); 
     } 
     else { 
      grid.get_masterTableView().showFilterItem() 
     } 
    } 
</script> 
1

請檢查是否有適當的網格ID,如果你使用$ find方法。提供的代碼有點混亂,我不確定哪個部分被調用。

在函數getMasterTableView中使用$ find,但你錯了我想。此外,如果此功能在JavaScript文件中,則「<%= RadGrid1.ClientID%>」將不會解析爲正確的ID。它必須在aspx文件中才能這樣做。

在函數ShowHideFilters中使用了錯誤的函數getElementById將返回不是Telerik的DOM對象。還請注意您的網格有「TestGrid」ID。

更新: 要獲取主表,您需要使用find方法。如果你想更通用的解決方案,然後我建議添加簡單的CSS類到你的按鈕。然後在onLoad事件中爲這些按鈕添加處理程序。如果您有放置內網jQuery的元素,那麼你可以用下面的函數來動態定位網格:

function getParentGrid($element) { 
    var $parentGrid = $element.closest("div.RadGrid"); 
    var parentGridId = $parentGrid[0].id; 
    return window.$find(parentGridId); 
} 
+0

作爲組件在運行時從代碼中創建的背後,我不能使用$ find方法。沒有

+0

我已經更新了答案也許這代碼片段將是有益的給你 – Machet

+0

無論如何,一定要設置網格的ID,創建的控件編程需要這些ID,使他們能夠回傳後裝入自己的ViewState。不要讓他們的一代機會和框架。 另外,添加一個「返回false」;語句在按鈕客戶端處理程序,如果你不想它回發(我沒有看到處理它的代碼,所以我認爲這是不需要的,你想要在客戶端上完成)。 – rdmptn