2010-07-13 64 views
1

我有一箇中繼器,我已經綁定到過濾列名稱,因爲它們已應用(當前使用會話,我可能會更改此循環以遍歷列尋找現在過濾器,我真的知道如何網格工作)。以編程方式從RadGrid中刪除標題上下文菜單過濾器

我在每個過濾列名旁邊都有一個按鈕,用於從RadGrid中刪除過濾器。

 <asp:Repeater ID="repCorpFilters" runat="server" OnItemCommand="repFilters_ItemCommand"> 
      <HeaderTemplate> 
       Current Filters: 
      </HeaderTemplate> 
      <ItemTemplate> 
       <asp:ImageButton runat="server" CommandName="removefilter" CommandArgument="corp" ImageUrl="../images/Delete.gif" /> 
       <asp:literal ID="litFilter" runat="server" Text='<%#Container.DataItem() %>' /> 
      </ItemTemplate> 
      <SeparatorTemplate> 
       , 
      </SeparatorTemplate> 
     </asp:Repeater> 


Protected Sub repFilters_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) 
    Select Case e.CommandName 
     Case "removefilter" 
      BindGrid(DirectCast([Enum].Parse(GetType(products), e.CommandArgument), products), Nothing, _ 
        CType(e.Item.FindControl("litFilter"), Literal).Text) 
    End Select 
End Sub 


Private Sub BindGrid(ByVal prod As products, Optional ByVal cusipFilter As String = Nothing, Optional ByVal strRemoveFilter As String = Nothing) 
    Dim dvCorp As DataView = CachedPartialCorp() 
    If Not IsNothing(cusipFilter) Then 
     isCusipFiltered = True 
     dvCorp.RowFilter = "CUSIP IN " & cusipFilter 
    End If 

    If Not IsNothing(strRemoveFilter) Then 
     Dim filters As List(Of String) = RemoveFilter("partialCorpFilters", strRemoveFilter) 

     If filters.Count = 0 Then 
      repCorpFilters.Visible = False 
     Else 
      repCorpFilters.DataSource = filters 
      repCorpFilters.DataBind() 
     End If 

     For Each gc As GridColumn In dtgCorp.MasterTableView.Columns 
      With gc 
       If .IsBoundToFieldName(strRemoveFilter) Then 
        .CurrentFilterFunction = GridKnownFunction.NoFilter 
        .CurrentFilterValue = "" 
        .AndCurrentFilterFunction = GridKnownFunction.NoFilter 
        .AndCurrentFilterValue = "" 
       End If 
      End With 
     Next 
    End If 

    dtgCorp.DataSource = dvCorp 
    dtgCorp.DataBind() 
End Sub 

一切工作正常,除從RadGrid實際刪除過濾器。在我通過列循環並找到正在嘗試刪除的過濾器的列時,我重置了過濾器下拉列表和值,這很好用!我可以右鍵單擊標題項目,並且過濾器顯示不被過濾。但數據保持過濾!我如何讓RadGrid根據選定的過濾器重新評估其新的過濾值?

代碼我感到的多汁位是在這裏:

 For Each gc As GridColumn In dtgCorp.MasterTableView.Columns 
      With gc 
       If .IsBoundToFieldName(strRemoveFilter) Then 
        .CurrentFilterFunction = GridKnownFunction.NoFilter 
        .CurrentFilterValue = "" 
        .AndCurrentFilterFunction = GridKnownFunction.NoFilter 
        .AndCurrentFilterValue = "" 
       End If 
      End With 
     Next 
    End If 

    dtgCorp.DataSource = dvCorp 
    dtgCorp.DataBind() 

回答

2
 For Each gc As GridColumn In dtg.MasterTableView.Columns 
      With gc 
       If .IsBoundToFieldName(strRemoveFilter) Then 
        dtg.MasterTableView.GetItems(GridItemType.FilteringItem)(0).FireCommandEvent(RadGrid.HeaderContextMenuFilterCommandName, _ 
         New Triplet(strRemoveFilter, New Pair("NoFilter", ""), New Pair("NoFilter", ""))) 
       End If 
      End With 
     Next 

這是我曾嘗試重新綁定()方法,終於做到了代碼:)

1

您是否嘗試過使用NeedDataSource網格結合,而不是用的DataBind()調用結合?在這種情況下,只需調用網格的Rebind()方法即可清除過濾器值。另請參閱如何清除this demo上的過濾器。

迪克

+0

,並不得要領:精確相同的結果。至於演示,他們用「RadGrid1.MasterTableView.FilterExpression = String.Empty」清除整個TableView的filterexpression。如果你完全清除過濾器,這很好,但我需要它在刪除選定的過濾器之後基於當前選擇的過濾器評估新的FilterExpression。 – 2010-07-13 19:13:11

+0

恐怕我不能在這裏獲得進一步的幫助,您可以聯繫Telerik在其網站的論壇上發帖。 – 2010-07-14 10:15:10

+0

是否也是這樣:)偉大的思想都一樣! – 2010-07-14 10:47:32

相關問題