CSLA FilteredBindingList - 部分匹配

CSLA FilteredBindingList - Partial Matches

我目前正在编写 .Net Web 应用程序,使用 SortedBindingList 和 FilteredBindingList。我遇到的一个问题 运行 是 FilteredBindingList 匹配部分匹配和完全匹配。这在基于用户输入(姓名、头衔等...)进行过滤时效果很好,但是在过滤具有与之关联的 ID 的 selection 时,它会匹配完整 ID 和任何包含部分 ID 的 ID火柴。我在下面给出了一个例子。

<select id="CustomerName">
  <option value="1">Frank</option>
  <option value="2">Bert</option>
  <option value="11">Jane</option>
</select>

如果我要过滤 select 列表的 'value' 属性,在本例中是客户的唯一标识符。使用 FilteredBindingList selecting Bert 或 Jane 将 return 只有与 Bert 或 Jane 关联的行。选择 Frank 将 return 与 Frank 和 Jane 关联的行,因为值 1 可以在 Frank 和 Jane 的记录上匹配。

我的vb.Net代码如下:

Dim filteredList As New FilteredBingList(Of CustomerOrders)(sortedList)
filteredList.ApplyFilter("CustomerID", CustomerName.SelectedValue)
e.BusinessObject = filteredList

我是不是漏掉了一步?因为似乎没有明显的方法可以防止过滤器匹配部分命中。

非常感谢您花时间read/reply解决我的问题。

干杯,

安迪

经过大量研究和谷歌搜索(我的 google-fu 很弱)我找到了我要找的东西。

默认情况下,FilteredBindingList 的 ApplyFilter 使用 Contains,这就是它返回与结果匹配的任何内容的原因。这很容易通过指定一个新的 FilterProvider 来解决。如果您需要示例,请参阅下面的代码。

Protected Sub Customers_SelectObject(Byval sender as Object, ByVal e As Csla.Web.SelectObjectArgs) Handles CustomerDataSource.SelectObject
    Dim filteredList As New FilteredBindingList(Of CustomerOrders)(sortedList)
    filteredList.FilterProvider = AddressOf CustomFilter
    filteredList.ApplyFilter("CustomerID", CustomerName.SelectedValue)
    e.BusinessObject = filteredList
End Sub

Private Function CustomFilter(item As Object, filter As Object) As Boolean
    Dim result As Boolean = False
    If item IsNot Nothing AndAlso filter IsNot Nothing Then
        result = CStr(item).Equals(CStr(filter))
    End If    
    Return result
End Function

如您所见,代码非常相似,几乎不需要改动。

感谢那些花时间查看我的问题的人。

干杯,

安迪