Finding text from the datagrid view in vb.net

29,500

Solution 1

Well you could set the cell's background color with a different color to highlight all the matches, and select only the cell corresponding to the current match:

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

If m_CurrentSearchIndex has a value of 0, it would select the first match, second match for a value of 1, etc.

Solution 2

You could use String.contains instead of an =.

Here is the MSDN article on the contains method:

http://msdn.microsoft.com/en-us/library/dy85x1sa.aspx

code to style the cell if it contains the search text:

    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
Share:
29,500
nightfire001
Author by

nightfire001

I am an asp.net programmer.

Updated on July 22, 2020

Comments

  • nightfire001
    nightfire001 almost 4 years

    I have a data grid view in one windows form named "GridViewForm". When the user search for the text from the search box from another window form named "FindForm", I want to highlight all the matching result in the data grid view. The search type can be exact or partial.

    For eg.

    If the user search for the text "stack", then the words "stack" from [Stack, stack-over, stacks, stack exchange] should be highlighted and first cell that match the query should be selected. When the user press next button then another cell that match the search query should be selected.

    My code for finding the text is like follow for it search only the exact word.

            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
    

    Is there any way to implement my concept? I am using vb.net windows form. Thanks in advance.