2013-02-14 136 views
0

好了,我的任务,所以今天一个是修改现有的Telerik的RadFilter在客户的网站。过滤器本身允许用户在Telerik RadGrid上执行查询。这一切都很好,但客户希望以逗号分隔列表的形式更轻松地进行过滤。生成自定义Telerik的RadFilter查询

<!-- 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会产生这样的:

enter image description here

这实际上是可能的?如果是这样,任何人都可以指出我正确的方向,我怎么会从后端生成一个自定义的RadFilter查询?

谢谢!

回答

1

这可能会帮助您开始在正确的方向,我已经做过类似的这个星期我的代码什么的,我已经发布前先解除一些对象名称和内容。

我所做的:

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

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

gridDat aSource获取从DB对象,我使用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; 
    } 
} 
+0

嘿布莱恩,其实这就是我最后到底在做什么。这不是一个完美的解决方案,但它的工作和客户似乎不太困扰。这个答案看起来很稳固,所以我会将其标记为已接受。谢谢! – 2013-02-15 08:45:34