RadGrid 过滤
RadGrid Filtering
有谁知道如何从 radGrid 中删除某些过滤器。我有存货,它们因数据类型而异,但我不需要全部,只需要其中的 3 或 4 个。我使用了 gridfiltermenu 但它从每一列中删除了某个过滤器。即:我在一列中需要等于,但在另一列中不需要。我已经尝试通过多种方式对此进行分类。这就是我所拥有的 - 请原谅混乱。我在后端绑定了数据,所以我没有将它们作为单独的列放在前面。我试图通过列名获取列,但 gridfilteringitem 等方法不接受名称作为参数。
<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);
}
}
}
这是我使用的代码:
它适用于不同的数据类型,您可以替换 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
有谁知道如何从 radGrid 中删除某些过滤器。我有存货,它们因数据类型而异,但我不需要全部,只需要其中的 3 或 4 个。我使用了 gridfiltermenu 但它从每一列中删除了某个过滤器。即:我在一列中需要等于,但在另一列中不需要。我已经尝试通过多种方式对此进行分类。这就是我所拥有的 - 请原谅混乱。我在后端绑定了数据,所以我没有将它们作为单独的列放在前面。我试图通过列名获取列,但 gridfilteringitem 等方法不接受名称作为参数。
<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);
}
}
}
这是我使用的代码:
它适用于不同的数据类型,您可以替换 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