Поиск через DataGridView с использованием текстового поля в BindingSource - PullRequest
0 голосов
/ 25 февраля 2019

Мне удалось заполнить содержимое DataGridView в моей форме.

Я добавил BindingSource и BindingNavigator в форму.Элемент управления Bindingsource имеет элемент, из которого я могу выбрать Textbox.

Я хочу, чтобы во время выполнения я мог ввести это Textbox в BindingSource, и он будет искать содержимое DataGridView ивыделите это.

Ниже приведен код, который я пробовал и получил ошибку ниже

Dim dt As DataTable
dt = DataGridView1.DataSource
dt.DefaultView.RowFilter = String.Format("Field = '{0}'", txtdatagrid.Text)

Я получаю эту ошибку:

Невозможно привести объект типа 'System.Windows.Forms.BindingSource 'для ввода' System.Data.DataTable '

1 Ответ

0 голосов
/ 26 февраля 2019

У меня была такая же потребность.Ниже приведен класс DatagridView, который я модифицировал и использовал.Каким бы ни был источник данных, я мог бы просмотреть все ячейки строковых значений.В моей форме мне пришлось изменить объявление Datagridview с System.Windows.Forms.DataGridView на «mDataGridView»

Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Windows
Imports System.Windows.Forms
Imports System.ComponentModel.Design

Partial Public Class mDataGridView
   Inherits System.Windows.Forms.DataGridView

   Public Sub New()

   End Sub


   Private Sub mDataGridView_Load(sender As Object, e As EventArgs)
      Me.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells ' Adjust as you need
    Sort(Me.Columns(0), ListSortDirection.Ascending) ' Adjust as you need
End Sub



'''<summary>
''' Searches text in datagridview cells
''' </summary>
''' <param name="txt"></param>
''' <param name="direction"></param>
''' <param name="ColIndex"></param>
Public Sub SearchText(txt As String, direction As Direction)
    'Keep track of selected line
    Static Position As Integer = CurrentRow.Index

    'Prevents searching when there is no row
    If Me.Rows.Count < 1 Then
        Return
    End If

    'keeps index of rows of matched cells

    Select Case direction
        Case direction.DOWN
            Dim start As Integer = Position + 1 ' Next Row DOWN
            For i As Integer = start To Me.Rows.Count - 1
                Dim mRow As DataGridViewRow = Me.Rows(i)

                For ColIndex As Integer = 0 To Me.Columns.Count - 1

                    While Not mRow.Cells(ColIndex).Value Is Nothing
                        If mRow.Cells(ColIndex).Value.ToString().ToUpper().Contains(txt.ToUpper()) Then
                            Me.SelectionMode = ataGridViewSelectionMode.FullRowSelect
                            'exclude non-string value cell (Checkbox,Image)
                            Dim val As Boolean = mRow.Cells(ColIndex).ValueType.Name = "Boolean"
                            val = mRow.Cells(ColIndex).ValueType.Name = "Image"
                            If val = False Then
                                mRow.Selected = True
                                Me.CurrentCell = mRow.Cells(ColIndex)
                                Position = Me.CurrentCell.RowIndex
                                Return
                            End If
                        End If
                        Exit While
                    End While
                Next ColIndex
                Position += 1
            Next i

            'no matched record found
            System.Windows.Forms.MessageBox.Show("No more matching record found", "")

            '///reset the position where search
            ' ///will start
            '///so that next search will start from 0.
            Position = -1


        Case direction.UP
            Dim start As Integer = Position - 1 ' Next Row UP
            For i As Integer = start To 0 Step -1
                If i < 0 Then Exit For
                Dim mRow As DataGridViewRow = Me.Rows(i)

                For ColIndex As Integer = 0 To Me.Columns.Count - 1

                    While Not mRow.Cells(ColIndex).Value Is Nothing
                        If mRow.Cells(ColIndex).Value.ToString().ToUpper().Contains(txt.ToUpper()) Then
                            Me.SelectionMode = DataGridViewSelectionMode.FullRowSelect
                            'exclude non-string value cell (Checkbox,Image)
                            Dim val As Boolean = mRow.Cells(ColIndex).ValueType.Name = "Boolean"
                            val = mRow.Cells(ColIndex).ValueType.Name = "Image"
                            If val = False Then
                                mRow.Selected = True
                                Me.CurrentCell = mRow.Cells(ColIndex)
                                Position = Me.CurrentCell.RowIndex
                                Return
                            End If
                        End If
                        Exit While
                    End While
                Next cols

            Next i
            'Alert user ....
            System.Windows.Forms.MessageBox.Show("No more matching record found", "")
            '///reset the position where search
            ' ///will start
            '///so that next search will start from Last Row.
            Position = Me.RowCount - 1
    End Select
End Sub

End Class



'''<summary>
'''Holds value for direction to navigate
'''  rows.
'''</summary>
Public Enum Direction
   DOWN
   UP
End Enum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...