2013-02-14 25 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