我目前有一个从csv填充的DataGridView。我创建了一个过滤器文本框和按钮,意图是它会在文本框中重新加载给定字符串的数据,并且只填充包含该字符串的行。我遇到的问题是,如果我输入单元格中包含的整个字符串,它只会填充行。例如:如果我搜索" hamburger",如果该行中的单元格准确读取" hamburger"它将仅填充一行,它将不会填充具有读取单元格的行"汉堡和薯条"。这令我感到困惑,因为我包括" .contains"在代码中。任何帮助都感激不尽。感谢。
Private Sub btnFilter_Click(sender As Object, e As EventArgs) Handles btnFilter.Click
Dim strFilter As String = txtFilter.Text
Dim TextFieldParser1 As New Microsoft.VisualBasic.FileIO.TextFieldParser("C:\CR2600\mc.csv")
TextFieldParser1.Delimiters = New String() {","}
While Not TextFieldParser1.EndOfData
Dim Row1 As String() = TextFieldParser1.ReadFields()
If DataGridView2.Columns.Count = 0 AndAlso Row1.Count > 0 Then
Dim i As Integer
For i = 0 To Row1.Count - 1
DataGridView2.Columns.Add("Column" & i + 1, "Column" & i + 1)
Next
End If
If Row1.Contains(strFilter) Then
DataGridView2.Rows.Add(Row1)
End If
End While
End Sub
答案 0 :(得分:1)
这是因为代码中的Row1
是一个数组。数组上的Contains
仅检查数组的任何字段中给定值的完全匹配。如果你想检查部件,那么你必须自己遍历数组(for
)并在每个数组元素值上调用Contains
,这样你就可以进行字符串比较。 / p>
Dim bFound as Bool
bFound = false
For i = 0 to Row1.Length
If Row1(i).Contains(strFilter) Then bFound = true
Next
If bFound Then DataGridView2.Rows.Add(Row1)
除此之外,我建议
If Row1(i).IndexOf(strFilter, PARAM) >= 0 Then bFound = true
其中PARAM是System.StringComparison
类型,您可以选择是否比较区分大小写。
P.S。:对于代码中的任何失败感到抱歉。我有一段时间没用过VB,我正在做C ++和C#。