RadGrid过滤

时间:2016-04-29 20:45:00

标签: c# asp.net telerik telerik-grid

有没有人知道如何从radGrid中删除某些过滤器。我有库存的,它们因数据类型而异,但我不需要所有这些只有3或4个。我使用了gridfiltermenu但是从每一列中删除了某个过滤器。即:我需要在一列中等于,而在另一列中不需要。我试图通过这么多方式来解决这个问题。这就是我所拥有的 - 原谅杂乱无章。我在后端有数据表,所以我不能将它们作为前面的单独列。我试图按列名获取列,但gridfilteringitem和其他方法不接受名称作为参数。

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);
        }
    }
}

以下是代码:

var arrayOfObjs = [{
  "ob1": "test1"
}, {
  "ob2": "test1" , k2:2
}, {
  "ob1": "test3"
}];

function getI( obj, arr){
 const checkK= Object.keys(obj);
 return arr.reduce((ac,x,i) => {
  if ( checkK.every(z =>  x[z] && obj[z] === x[z]) )
    ac.push(i);
  return ac;
  },[])
}

document.write( 'result is :'+ getI({ob2:'test1', k2:2},arrayOfObjs))

1 个答案:

答案 0 :(得分: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