生成自定义Telerik RadFilter查询

时间:2013-02-14 15:05:08

标签: asp.net telerik

好的,我今天的任务之一就是在客户的网站上修改现有的Telerik RadFilter。过滤器本身允许用户在Telerik RadGrid上执行查询。这一切都很好,但是客户希望以逗号分隔列表的形式更容易地进行过滤。

<!-- The new comma-separated list text box -->
<asp:TextBox ID="txtQuery" runat="server" TextMode="MultiLine"></asp:TextBox>
<asp:Button ID="btnQuery" runat="server" Text="Filter By List" />

<!-- The existing RadFilter -->
<telerik:RadFilter runat="server" ID="AttendeesGridFilter" Visible="true"
    FilterContainerID="AttendeesGrid" ShowApplyButton="false" />

此处查看的AttendeesGrid(RadGrid)基本上包含有关事件参与者的各种列。此逗号分隔列表将允许用户快速按参与者ID过滤。我认为我这样做的方法是拉出txtQuery的内容,将其放入一个排序列表并将其反射回RadFilter,这样1,2,3,4的输入就会生成如下内容:< / p>

enter image description here

这实际上可行吗?如果是这样,有人能指出我如何从后端生成自定义RadFilter查询的正确方向吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

这可能会帮助你从正确的方向开始,我本周用我的代码做了类似的事情,我必须在发布之前删除一些对象名称和内容。

我做了什么:

  • 需要DataSource的radgrid
  • 将数据源提取移动到新函数并从needDataSource
  • 调用此函数
  • 过滤器(radtextbox)和按钮,通过调用自定义数据源提取器来触发自定义过滤器&amp;重新绑定网格
  • 将所有内容附加到radAjax Manager(未显示)以避免整页刷新

radgrid控件

<telerik:RadTextBox ID="searchBox" runat="server" ></telerik:RadTextBox>
<asp:Button ID="btnAdvSearch" runat="server" Text="Search" OnCommand="FilterBySearch" />
<telerik:RadGrid ID="radGrid1" EnableAJAX="True" runat="server" OnNeedDataSource="radGrid1_NeedDataSource" OnItemDataBound="radGrid1_ItemDataBound">
...
</telerik:RadGrid>

我的代码背后我已经将DataFetching移动到它自己的函数中,以便可以从几个地方而不是仅仅在needDataSource上调用

protected void radGrid1_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
    SetGridDatasource();
}

搜索按钮将触发此功能,该功能获取源并重新绑定网格

protected void FilterBySearch(object sender, CommandEventArgs e)
{
    SetGridDatasource();
    radGrid1.DataBind();
}

gridDataSource从数据库中提取对象,我使用linq根据传入的搜索文本进行过滤。

private void SetGridDatasource()
{
    var searchText = searchBox.Text.Trim();
    using (var db = new ContactsDataContext())
    {
        var DataObjectList = db.DataObjectGetByAccount(AccountId, 3).ToList();
        var filtered = (from list in DataObjectList where
            (list.DataObjectName.Contains(searchText) ||
            list.id.ToString().Contains(searchText) ||
            list.description.ToString().Contains(searchText))
            select list);

        rgDataObjects.DataSource = filtered;
    }
}