Как отобразить все записи из базы данных в Gridview, а также выполнить фильтрацию с помощью текстового поля? - PullRequest
0 голосов
/ 26 января 2011

Как отобразить целые записи из базы данных в Gridview, а также выполнить фильтрацию с помощью текстового поля?

1 Ответ

0 голосов
/ 27 января 2011

Есть множество способов сделать это, и то, как вы подходите к проблеме, может зависеть от ряда взаимосвязанных факторов;Сколько записей будет возвращено в разумных пределах каждый раз, когда пользователь выполняет поиск?Должен ли список по умолчанию загружаться со ВСЕМИ записями и фильтроваться только по запросу, или он должен загружаться emply и возвращать только запрошенные записи?При разумных условиях использования, будет ли DGV загружен всем содержимым таблицы или только несколькими записями, пост-поиск?

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

Этот пример является довольно элементарным подходом и не использует некоторые тонкости ADO.NET, такие как DataSet, TableADapter и тому подобное.Вместо этого он выполняет фильтрацию в качестве операции «beck-end», отправляя параметризованный запрос и возвращая набор результатов в виде DataTable, который затем может быть установлен непосредственно в качестве источника данных для вашего элемента управления DGV.Я не буду удивлен, если это откроет аргумент (я имею в виду, дебаты) о путях и средствах получения данных с помощью ADO.NET.,.

В любом случае, есть и другие варианты, и я не могу быть уверен, что будет наиболее практичным и / или эффективным, учитывая мои ограниченные знания вашего дизайна.Одним из примеров может быть получение полностью заполненной DataTable в качестве члена частного класса в форме, а затем выполнение операций DataView.RowFilter с ней, используя выходные данные в качестве источника данных для вашей таблицы.Это имеет свои плюсы и минусы;В первую очередь это может быть лучше для наборов результатов ограниченного размера или для случаев, когда доступ к данным на внутреннем сервере страдает узкими местами производительности.

Замечание: мой глупый пример здесь, по сути, уточняет поиск при каждом изменении текста в текстовом поле.В зависимости от ваших потребностей вы можете настроить его так, чтобы поиск не выполнялся, пока пользователь не нажмет кнопку или клавишу ввода.

ПРИМЕЧАНИЕ. Это всего лишь один пример, и любой подобный код должен быть усовершенствован с учетом обработки исключений и адаптирован к требованиям производительности вашего проекта!

Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim dgv As DataGridView = Me.DataGridView1
    Me.UpdateSearch("")

End Sub

'A Function which returns a DataTable, to be used as the DataSource for a DataGridView:
Private Function ClientsDataTable(ByVal SearchCriteria As String) As DataTable


    'The default popoulation of your Grid Control will determine how you 
    'contruct your SQL and/or set up you parameter(s); If you want it BLANK until the user enters a value in 
    'your textbox, you will need to modify some of the logic here . . . THIS extra-simple example
    'fills the DGV with ALL records in the table if no parameter (and empty String) is passed:
    Dim SQL As String = _
    "SELECT ClientID, LastName, FirstName " & _
    "FROM tblClient " & _
    "WHERE LastName Like @LastName & '%'"

    Dim dt As New DataTable

    Using cn As New OleDb.OleDbConnection(My.Settings.CreateThisConnection)
        Using cmd As New OleDb.OleDbCommand(SQL, cn)
            cmd.Parameters.AddWithValue("@LastName", SearchCriteria)

            cn.Open()
            Dim dr As OleDbDataReader = cmd.ExecuteReader
            dt.Load(dr)
            dr.Close()
            cn.Close()
        End Using
    End Using

    Return dt

End Function

Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    Me.UpdateSearch(Me.TextBox1.Text.Trim)
End Sub

Private Sub UpdateSearch(ByVal SearchCriteria As String)
    Me.DataGridView1.DataSource = ClientsDataTable(SearchCriteria)
End Sub
End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...