【问题标题】:Generating Custom Telerik RadFilter Query生成自定义 Telerik RadFilter 查询
【发布时间】:2013-02-14 15:05:07
【问题描述】:

好的,我今天的任务之一是修改客户网站上现有的 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" />

基本上,这个查看的参加者网格 (RadGrid) 包含有关活动参加者的各种列。此逗号分隔列表将允许用户按与会者 ID 批量快速过滤。我想我这样做的方法是拉取 txtQuery 的内容,将其放入排序列表中,然后在 RadFilter 处将其触发,以便 1、2、3、4 的条目会生成如下内容:

这真的可能吗?如果是这样,谁能指出我如何从后端生成自定义 RadFilter 查询的正确方向?

谢谢!

【问题讨论】:

    标签: asp.net telerik


    【解决方案1】:

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

    我做了什么:

    • radgrid 需要数据源
    • 将数据源获取移至新函数并从需要数据源调用此函数
    • 一个过滤器 (radtextbox) 和按钮,通过调用自定义数据源提取器和重新绑定网格来触发自定义过滤器
    • 将所有内容附加到 radAjax 管理器(未显示)以避免整个页面刷新

    辐射网格

    <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 移到了它自己的函数中,以便可以从多个地方调用它,而不仅仅是在需要数据源上

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

    【讨论】:

    • 嘿,Brian,这几乎就是我最终所做的。这不是一个完美的解决方案,但它有效,客户似乎并没有太在意。这个答案看起来很可靠,所以我将其标记为已接受。谢谢!
    猜你喜欢
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多