Поиск текста из таблицы данных в vb.net - PullRequest
1 голос
/ 02 ноября 2011

У меня есть представление сетки данных в одной форме окна с именем «GridViewForm».Когда пользователь выполняет поиск текста из окна поиска в другой форме окна с именем «FindForm», я хочу выделить все соответствующие результаты в представлении таблицы данных.Тип поиска может быть точным или частичным.

Например,

Если пользователь ищет текст «стек», то слова «стек» из [Stack, stack-over, stacks, обмен стеками] должен быть выделен, и должна быть выбрана первая ячейка, соответствующая запросу.Когда пользователь нажимает кнопку «Далее», следует выбрать другую ячейку, соответствующую поисковому запросу.

Мой код для поиска текста аналогичен приведенному ниже для поиска только точного слова.

        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 форму окна.Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 02 ноября 2011

Вы можете использовать String.contains вместо =.

Вот статья в MSDN, содержащая метод:

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

код для стилизации ячейки, если она содержит текст для поиска:

    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
2 голосов
/ 02 ноября 2011

Хорошо, вы можете установить цвет фона ячейки другим цветом, чтобы выделить все совпадения, и выбрать только ячейку, соответствующую текущему совпадению:

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 и т. д.

0 голосов
/ 04 мая 2013
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...