0

好的,我今天的任务之一是修改客户网站上现有的 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 的条目会生成如下内容:

在此处输入图像描述

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

谢谢!

4

1 回答 1

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 移到它自己的函数中,以便可以从多个地方调用它,而不仅仅是在 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;
    }
}
于 2013-02-14T18:27:51.797 回答