2016-04-29 75 views
0

有谁知道如何从radGrid中删除某些过滤器。我拥有股票,它们因数据类型而异,但我不需要它们中的3或4个。我使用了gridfiltermenu,但是它从每列中删除了某个过滤器。即:我需要等于一列,而不是另一列。我试图通过这么多方式来排序。这是我所拥有的 - 原谅混乱。我的数据绑定在后端,所以我没有把它们作为前面的单个列。我试图通过列名获得列,但其他方法中的gridfilteringitem不接受名称作为参数。RadGrid过滤

<telerik:RadGrid ID="gvPIOList" runat="server" 
     Class="display table table-bordered table-hover table-responsive text-center" 
     CellPadding="2" HorizontalAlign="Center" AllowPaging="True" 
     AllowSorting="True" GroupPanelPosition="Top" Skin="Outlook" 
     ShowFooter="True" OnNeedDataSource="gvPIOList_NeedDataSource" 
     MasterTableView-RowIndicatorColumn-Visible="false" 
     HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" 
     AlternatingItemStyle-HorizontalAlign="Center" AllowFilteringByColumn="true" 
     MasterTableView-EditFormSettings-EditColumn-FilterListOptions="VaryByDataTypeAllowCustom" 
     MasterTableView-EditFormSettings-EditColumn-ShowFilterIcon="false" 
     MasterTableView-EditFormSettings-EditColumn-AndCurrentFilterFunction="Contains" 
     OnColumnCreated="gvPIOList_ColumnCreated" OnInit="gvPIOList_Init" 
     OnItemCreated="gvPIOList_ItemCreated"> 
      <MasterTableView GroupLoadMode="Server" 
       EditFormSettings-EditColumn-AutoPostBackOnFilter="true" 
       EditFormSettings-EditColumn-FilterDelay="1000" 
       AllowFilteringByColumn="true" 
       EditFormSettings-EditColumn-FilterListOptions="VaryByDataTypeAllowCustom" 
       EditFormSettings-EditColumn-ShowFilterIcon="false"> 
      </MasterTableView> 
</telerik:RadGrid> 

下面是代码:

protected void gvPIOList_Init(object sender, EventArgs e) 
{ 
    GridFilterMenu menu = gvPIOList.FilterMenu; 
    int i = 0; 
    while (i < menu.Items.Count) 
    { 
     if (menu.Items[i].Text == "NoFilter" || menu.Items[i].Text == "Contains" || menu.Items[i].Text == "Equals" || menu.Items[i].Text == "StartsWith") 
     { 
      i++; 
     } 
     else 
     { 
      menu.Items.RemoveAt(i); 
     } 
    } 
} 

回答

0

这是我使用的代码:

它适用于不同的数据类型,你可以通过列名替换column.get_dataType() == "Sytem.Int64"

in { 'NoFilter': '', 'Contains': '' }部分写下你想要保留的值。

调用此函数的radgrid控件的客户端设置部分:

ASPX:

<ClientSettings EnableRowHoverStyle="true"> 
    <ClientEvents OnFilterMenuShowing="filterMenuShowing" /> 
</ClientSettings> 
<FilterMenu OnClientShowing="MenuShowing" /> 

.js文件(可在ASPX直接放置):

var column = null; 
function MenuShowing(sender, args) 
{ 
if (column == null) return; 
var menu = sender; var items = menu.get_items(); 
if (column.get_dataType() == "System.String") 
{ 
    var i = 0; 
    while (i < items.get_count()) 
    { 
     if (!(items.getItem(i).get_value() in { 'NoFilter': '', 'Contains': '' })) 
     { 
      var item = items.getItem(i); 
      if (item != null) 
      { 
       item.set_visible(false); 
      } 
     } 
     else 
     { 
      var item = items.getItem(i); 
      if (item != null) 
      { 
       item.set_visible(true); 
      } 
     } 
     i++; 
    } 
} 
if (column.get_dataType() == "System.Int64") 
{ 
    var j = 0; while (j < items.get_count()) 
    { 
     if (!(items.getItem(j).get_value() in { 'NoFilter': '', 'EqualTo': '' })) 
     { 
      var item = items.getItem(j); if (item != null) 
       item.set_visible(false); 
     } 
     else 
     { 
      var item = items.getItem(j); if (item != null) item.set_visible(true); 
     } 
     j++; 
    } 
} 
column = null; 
menu.repaint(); 
} 
function filterMenuShowing(sender, eventArgs) 
{ 
    column = eventArgs.get_column(); 
} 

这取自Telerik的网站:Filter Menu Showing

相关问题