Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.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
在vb.net中从datagrid视图查找文本_Vb.net_Winforms_Datagridview - Fatal编程技术网

在vb.net中从datagrid视图查找文本

在vb.net中从datagrid视图查找文本,vb.net,winforms,datagridview,Vb.net,Winforms,Datagridview,我有一个名为“GridViewForm”的windows窗体中的数据网格视图。当用户从另一个名为“FindForm”的窗口表单的搜索框中搜索文本时,我想突出显示数据网格视图中的所有匹配结果。搜索类型可以是精确的,也可以是局部的 例如 如果用户搜索文本“stack”,则应突出显示[stack,stack over,stacks,stack exchange]中的单词“stack”,并选择与查询匹配的第一个单元格。当用户按下“下一步”按钮时,应选择与搜索查询匹配的另一个单元格 我查找文本的代码类似于

我有一个名为“GridViewForm”的windows窗体中的数据网格视图。当用户从另一个名为“FindForm”的窗口表单的搜索框中搜索文本时,我想突出显示数据网格视图中的所有匹配结果。搜索类型可以是精确的,也可以是局部的

例如

如果用户搜索文本“stack”,则应突出显示[stack,stack over,stacks,stack exchange]中的单词“stack”,并选择与查询匹配的第一个单元格。当用户按下“下一步”按钮时,应选择与搜索查询匹配的另一个单元格

我查找文本的代码类似于follow for it,只搜索确切的单词

        Dim gridRow As Integer = 0
        Dim gridColumn As Integer = 0
        For Each Row As DataGridViewRow In AccountsDataGridView.Rows
            For Each column As DataGridViewColumn In AccountsDataGridView.Columns
                If TryCastString(AccountsDataGridView.Rows(gridRow).Cells(gridColumn).Value).ToLower = SearchTextBox.Text.ToLower Then
                    'AccountsDataGridView.Rows(intcount).Cells(0).Value = "0"
                    MsgBox("FOUND") 'Should be highlight insted of showing message and the cell should be select.
                End If
                gridColumn += 1
            Next column
            gridColumn = 0
            gridRow += 1
        Next Row

有什么方法可以实现我的理念吗?我正在使用vb.net windows窗体。提前感谢。

您可以使用String.contains而不是an=

以下是有关contains方法的MSDN文章:

如果单元格包含搜索文本,则为其设置样式的代码:

    Dim someText As String = SearchTextBox.Text
    Dim gridRow As Integer = 0
    Dim gridColumn As Integer = 0
    For Each Row As DataGridViewRow In AccountsDataGridView.Rows
        For Each column As DataGridViewColumn In AccountsDataGridView.Columns
            Dim cell As DataGridViewCell = (AccountsDataGridView.Rows(gridRow).Cells(gridColumn))
            If cell.Value.ToString.ToLower.Contains(someText.ToLower) Then
                cell.Style.BackColor = Color.Yellow
            End If
            gridColumn += 1
        Next column
        gridColumn = 0
        gridRow += 1
    Next Row

您可以使用不同的颜色设置单元格的背景色,以突出显示所有匹配项,并仅选择与当前匹配项对应的单元格:

Dim searchIndex = 0
AccountsDataGridView.ClearSelection()
For Each row As DataGridViewRow In AccountsDataGridView.Rows
    For each cell As DataGridViewCell in row.Cells
        If CStr(cell.Value).Contains(SearchTextBox.Text, StringComparison.OrdinalIgnoreCase) Then
            If searchIndex = m_CurrentSearchIndex Then
                'This is the cell we want to select
                cell.Selected = True
            End If
            'Yellow background for all matches
            cell.Style.BackColor = Color.Yellow
            searchIndex += 1
        End If
    Next
Next

如果m_CurrentSearchIndex的值为0,它将选择第一个匹配项,第二个匹配项的值为1,等等。

感谢您的回复。它帮助我在网格中查找项目。我仍然有一个问题,当我使用上面的代码搜索项目时,它只突出显示最后一个匹配的项目。我想在找到第一个匹配项时突出显示,当用户单击“下一步”时,应突出显示下一个匹配项吗?你能帮我解决这个问题吗?
Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged

 For Each dr As DataGridViewRow In Me.DataGridView1.Rows

            If dr.Cells(0).Value.ToString.Contains(TextBox2.Text) Then dr.Visible = True Else dr.Visible = False


        Next
    End Sub