Фильтр поиска в Datagridview с помощью текстового поля

У меня есть searchbox, как показано на изображении ниже. Я хочу, чтобы когда я набираю букву или цифру, данные gridview отображали данные, соответствующие тому, что я ввел в searchbox. У меня уже есть код для этого, но он только для одного столбца и работает только сначала, но когда я добавляю другие данные, он вообще не работает. Не могли бы вы предложить лучший код для этого? Благодарю вас! :)

Кстати, вот мой код для фильтра:

Private Sub txtSearch_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSearch.TextChanged
            EmployeeProfileBindingSource.Filter = String.Format("[Employee_Lname] Like '{0}%'",
  Me.txtSearch.Text.Trim())

        End Sub

введите здесь описание изображения

Изображение здесь


person FrustratedProgrammer    schedule 02.08.2017    source источник
comment
Что такое EmployeeProfileBindingSource? Это DataSource из Datagridview?   -  person Mousa Alfhaily    schedule 04.08.2017
comment
Смотрите мой ответ, надеюсь, он поможет :)   -  person Mousa Alfhaily    schedule 04.08.2017
comment
Да, это источник Datagridview :)   -  person FrustratedProgrammer    schedule 04.08.2017


Ответы (1)


Попробуйте это, это должно избавиться от ошибки при попытке поиска по другому ключевому слову, здесь я заполнил столбцы Employee_ID и Employee_Fname, просто чтобы показать вам, как это работает:

Public Class Form1
    Private dtTableGrd As DataTable
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        DataGridView1.DataSource = EmployeeProfileBindingSource 
        dtTableGrd = EmployeeProfileBindingSource
    End Sub

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        dtTableGrd.DefaultView.RowFilter = "Employee_Fname Like '%" & TextBox1.Text & "%'"
    End Sub
End Class

Теперь, если вам нужно выполнить поиск в других столбцах, просто скопируйте и вставьте приведенный выше код фильтрации и измените имя столбца.

Наконец, я надеюсь, что это поможет вам, пожалуйста, дайте мне знать, если это поможет :)

person Mousa Alfhaily    schedule 03.08.2017
comment
Извините, но я думаю, что в приведенном выше коде есть синтаксическая ошибка? dtTable.Columns.AddRange({Новый столбец данных с {.ColumnName = Employee_ID, .AutoIncrement = True, .AutoIncrementSeed = 1, .AutoIncrementStep = 1}, New DataColumn (Employee_Fname)}, New DataColumn (Employee_Lname)}) говорит, что есть Слишком много аргументов для «Public Sub addRange(... - person FrustratedProgrammer; 04.08.2017
comment
@FrustratedProgrammer, да, извините, это моя ошибка, но попробуйте сейчас, я все исправил, я удалил } после ("Employee_Fname"), а также изменил эту строку: dtTableGrd.DefaultView.RowFilter = "Employee_Fname Like '%" & TextBox1.Text & "%'", я отредактировал свой ответ. - person Mousa Alfhaily; 04.08.2017
comment
@FrustratedProgrammer. Вы также можете увидеть это здесь › Клип - person Mousa Alfhaily; 04.08.2017
comment
@FrustratedProgrammer, какие-нибудь обновления по поводу ошибки? - person Mousa Alfhaily; 04.08.2017
comment
Извините, позднее обновление. Ахм, я действительно собираюсь напечатать все эти Dims выше? Если так? Что делать, если мне нужно сохранить тысячи записей? Я имею в виду, должен ли я продолжать размещать эти Dim dr как DataRow...? - person FrustratedProgrammer; 07.08.2017
comment
Я видел клип. Это был именно тот результат, который мне нужен, но мне нужно знать, как я могу динамически создавать такой результат, как у вас :). В любом случае! Спасибо за ответ на мой вопрос, вы очень помогаете моему проекту. Буду ждать твоего обновления. - person FrustratedProgrammer; 07.08.2017
comment
Да, я сделал это только для того, чтобы показать вам, как это сделать, но вы можете изменить код в соответствии с вашими потребностями, ведь у вас есть DataSource с именем EmployeeProfileBindingSource, верно? Так что просто замените dtTable на DataSource в строках, где это DataGridView1.DataSource = dtTable и dtTableGrd = dtTable, а затем удалите все Dims выше. Вы хотите, чтобы я обновил ответ, чтобы показать, что я говорил?? - person Mousa Alfhaily; 07.08.2017
comment
Пожалуйста, сделай. :) Спасибо! - person FrustratedProgrammer; 07.08.2017
comment
@FrustratedProgrammer Хорошо, я отредактировал свой ответ, надеюсь, это поможет. - person Mousa Alfhaily; 07.08.2017
comment
Там все еще ошибка в синтаксисе. В части dtTableGrd = EmployeeProfileBindingSource говорится, что значение типа «System.Windows.Forms.BindingSource» не может быть преобразовано в System.Data.DataTable.. - person FrustratedProgrammer; 07.08.2017
comment
@FrustratedProgrammer, О, это не сработает, если это BindingSource, попробуйте это: dtTableGrd = DataGridView1.DataSource вместо dtTableGrd = EmployeeProfileBindingSource. - person Mousa Alfhaily; 07.08.2017
comment
@FrustratedProgrammer, извините, я не могу вам с этим помочь, потому что у меня нет подключения к какой-либо базе данных, поэтому я не знаю, что происходит в вашем проекте, но я думаю, что это решение вам не подойдет. . - person Mousa Alfhaily; 08.08.2017
comment
Все в порядке. У меня уже есть ответ. Но метод, который я использую, отображает только Fname или Lname. Но ничего, это может быть альтернативой. Хаха! В любом случае, большое спасибо за вашу помощь! Бог благословил. - person FrustratedProgrammer; 08.08.2017