过滤.Net中的DataGridView行

时间:2015-03-06 18:45:52

标签: vb.net datagridview

我目前有一个从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

1 个答案:

答案 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#。