好的,我今天的任务之一就是在客户的网站上修改现有的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>
这实际上可行吗?如果是这样,有人能指出我如何从后端生成自定义RadFilter查询的正确方向吗?
谢谢!
答案 0 :(得分:1)
这可能会帮助你从正确的方向开始,我本周用我的代码做了类似的事情,我必须在发布之前删除一些对象名称和内容。
我做了什么:
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;
}
}