这是我的第一篇文章,请让我知道如何改进。
我的问题分为两部分。首先,我正在创建一个搜索函数,它在文本框中获取文本,在数据库中引用它并将结果添加到数据网格视图中。它有效,但它区分大小写,并且冗长。我已经成功解决了灵敏度问题,但并非没有添加大量的线条。此外,我的方法是在数据网格视图中生成多个相同的结果。
我的问题是:是否有更简单的方法来编码此搜索,如何使其不敏感?
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
答案 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
这对我来说非常有用,我希望你觉得它很有用。