如何在VB.NET中使搜索不敏感?

时间:2015-01-09 17:08:37

标签: vb.net search case-insensitive

这是我的第一篇文章,请让我知道如何改进。

我的问题分为两部分。首先,我正在创建一个搜索函数,它在文本框中获取文本,在数据库中引用它并将结果添加到数据网格视图中。它有效,但它区分大小写,并且冗长。我已经成功解决了灵敏度问题,但并非没有添加大量的线条。此外,我的方法是在数据网格视图中生成多个相同的结果。

我的问题是:是否有更简单的方法来编码此搜索,如何使其不敏感?

 dgvFileInfo.Rows.Clear()

    If searchBox.Text = "" Then 

    ElseIf srchCrit = "ProjectNumber" Then
        Dim srchDesc As String = ""
        Dim rtrnDesc As String = ""
        Dim j As Integer = 0

        For Each row As DataRow In TblFiles.Rows
            rtrnDesc = row.Item(srchCrit).ToString
            srchDesc = searchBox.Text
            If rtrnDesc.Contains(srchDesc) Then
                dgvFileInfo.Rows.Add()
                dgvFileInfo.Item(0, j).Value = row.Item("ProjectNumber").ToString
                dgvFileInfo.Item(1, j).Value = row.Item("ProjectName").ToString
                dgvFileInfo.Item(2, j).Value = row.Item("Client").ToString
                dgvFileInfo.Item(3, j).Value = row.Item("City").ToString & ", " & row.Item("State").ToString
                j += 1
            End If
        Next
    Else
        Dim srchDesc As String = ""
        Dim rtrnDesc As String = ""
        Dim j As Integer = 0

        Dim letter As Char = searchBox.Text.Substring(0, 1)
        Dim line As String = searchBox.Text.Substring(1, searchBox.Text.Length - 1)

        For Each row As DataRow In TblFiles.Rows '***Here's my sensitivity issue**
            rtrnDesc = row.Item(srchCrit).ToString
            srchDesc = UCase(letter) & line
            If rtrnDesc.Contains(srchDesc) Then
                dgvFileInfo.Rows.Add()
                dgvFileInfo.Item(0, j).Value = row.Item("ProjectNumber").ToString
                dgvFileInfo.Item(1, j).Value = row.Item("ProjectName").ToString
                dgvFileInfo.Item(2, j).Value = row.Item("Client").ToString
                dgvFileInfo.Item(3, j).Value = row.Item("City").ToString & ", " & row.Item("State").ToString
                j += 1
            End If

            srchDesc = LCase(letter) & line
            If rtrnDesc.Contains(srchDesc) Then
                dgvFileInfo.Rows.Add()
                dgvFileInfo.Item(0, j).Value = row.Item("ProjectNumber").ToString
                dgvFileInfo.Item(1, j).Value = row.Item("ProjectName").ToString
                dgvFileInfo.Item(2, j).Value = row.Item("Client").ToString
                dgvFileInfo.Item(3, j).Value = row.Item("City").ToString & ", " & row.Item("State").ToString
                j += 1
            End If

            srchDesc = LCase(letter) & LCase(line)
            If rtrnDesc.Contains(srchDesc) Then
                dgvFileInfo.Rows.Add()
                dgvFileInfo.Item(0, j).Value = row.Item("ProjectNumber").ToString
                dgvFileInfo.Item(1, j).Value = row.Item("ProjectName").ToString
                dgvFileInfo.Item(2, j).Value = row.Item("Client").ToString
                dgvFileInfo.Item(3, j).Value = row.Item("City").ToString & ", " & row.Item("State").ToString
                j += 1
            End If

            srchDesc = UCase(letter) & UCase(line)
            If rtrnDesc.Contains(srchDesc) Then
                dgvFileInfo.Rows.Add()
                dgvFileInfo.Item(0, j).Value = row.Item("ProjectNumber").ToString
                dgvFileInfo.Item(1, j).Value = row.Item("ProjectName").ToString
                dgvFileInfo.Item(2, j).Value = row.Item("Client").ToString
                dgvFileInfo.Item(3, j).Value = row.Item("City").ToString & ", " & row.Item("State").ToString
                j += 1
            End If

        Next

    End If

2 个答案:

答案 0 :(得分:0)

1)您正在对应用程序进行比较,这意味着它正在VB代码中发生。要进行不区分大小写的搜索,您可以执行.ToUpper().ToLower()并进行比较。或者,您可以使用String.Compare

' using ToUpper (ToLower would be the same)
Dim isFound as Boolean = ("My string".ToUpper() = row("myField").ToString().ToUpper())

' using String.Compare
Dim isFound as Boolean = (String.Compare("My String", row("myField"), True) = 0)

2)最简单的方法是在数据库中进行搜索。如果你可以这样做并且你的数据库不区分大小写(SQL Server实例默认不区分大小写),你现在可以使用LINQ和/或像NHibernate这样的ORM在数据库中构建和执行sql。这将是一系列问题,这些问题已在SO和网络上多次回答。

答案 1 :(得分:0)

我找到了一个不错的方法,可以通过其他帖子进行不区分大小写的搜索。

If myString.IndexOf(myVar, 0, StringComparison.CurrentCultureIgnoreCase) > -1 Then
       'your code here
End If

这对我来说非常有用,我希望你觉得它很有用。