Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用BindingListView进行多列筛选_.net_Search_Datagridview_Filtering_Bindinglist - Fatal编程技术网

.net 使用BindingListView进行多列筛选

.net 使用BindingListView进行多列筛选,.net,search,datagridview,filtering,bindinglist,.net,Search,Datagridview,Filtering,Bindinglist,我正在使用位于的BindingListView dll对DataGridView进行排序,并将通用列表作为其数据源。我读过关于过滤的书,它使用起来相当简单,但我在尝试找出如何为过滤器使用多个搜索参数时遇到了问题。这里有一个例子 Private Sub txtProjectNumber_TextChanged(sender As Object, e As System.EventArgs) Handles txtProjectNumber.TextChanged, txtDescription.T

我正在使用位于的BindingListView dll对DataGridView进行排序,并将通用列表作为其数据源。我读过关于过滤的书,它使用起来相当简单,但我在尝试找出如何为过滤器使用多个搜索参数时遇到了问题。这里有一个例子

Private Sub txtProjectNumber_TextChanged(sender As Object, e As System.EventArgs) Handles txtProjectNumber.TextChanged, txtDescription.TextChanged,
    txtOracleNumber.TextChanged, txtBudgetYearFrom.TextChanged, txtBudgetYearTo.TextChanged, txtWeek3Start.TextChanged, txtWeek3End.TextChanged
    view.ApplyFilter(AddressOf FilterData)
End Sub

Private Function FilterData(ByVal projectDetails As ProjectDetails) As Boolean
    Try
        If Not String.IsNullOrWhiteSpace(txtProjectNumber.Text) Then  
            Return projectDetails.ProjectNum.ToLower().StartsWith(txtProjectNumber.Text.ToLower())
        End If
        If Not String.IsNullOrWhiteSpace(txtDescription.Text) Then
            Return projectDetails.Description.ToLower().StartsWith(txtDescription.Text.ToLower())
        End If
    Catch ex As Exception
        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try
    Return False
End Function

因此,在这里您可以看到,如果我更改txtProjectNumber文本框中的文本,我的过滤器将返回正确的结果。但是,如果我在txtProjectNumber文本框中输入“x”,并且还希望通过txtDescription的“morning”进行搜索,那么txtDescription将被忽略,因为它会命中txtProjectNumber并返回,而不会命中txtDescription文本框。我怎样才能让它一直向下运行,从每个非空输入构建一个过滤器?

您只需要根据测试返回一个布尔值,实际上并不是返回对象本身,所以不是多次返回,而是将您的条件放在if/andalso语句中,如果满足所有条件,则返回true

Private Function FilterData(ByVal projectDetails As ProjectDetails) As Boolean
    Dim result As Boolean = False

    If projectDetails.ProjectNum.ToLower().StartsWith(txtProjectNumber.Text.ToLower()) andalso _
       projectDetails.Description.ToLower().StartsWith(txtDescription.Text.ToLower()) andalso _

              <remaining tests>

       result = true
    End If
Return result
End Function
Private Function FilterData(ByVal projectDetails作为projectDetails)作为布尔值
将结果设置为布尔值=False
如果projectDetails.ProjectNum.ToLower().StartsWith(txtProjectNumber.Text.ToLower())和_
projectDetails.Description.ToLower().StartWith(txtDescription.Text.ToLower())和_
结果=真
如果结束
返回结果
端函数