VB.net фильтр источника данных

#vb.net #datagridview #combobox #onselect

#vb.net #datagridview #поле со списком #onselect

Вопрос:

У меня есть datagridview с источником данных в таблице доступа. Datagridview заполнен и идеален, но теперь я хочу создать дополнительный выпадающий список с возможностью фильтрации.

Это в моей функции загрузки страницы:

 Private Sub ArchiefFacturatie_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'TODO: This line of code loads data into the 'CharelIjsDataSet.tblFactuur' table. You can move, or remove it, as needed.

    Me.TblFactuurTableAdapter.Fill(Me.CharelIjsDataSet.tblFactuur)

'Filling comboxbox part skipped

End Sub
  

В этот момент поле со списком также заполняется datagridview.
Теперь я создал действие on selectChange в окне со списком.

Я понятия не имел, как с этим справиться, но я попробовал:

 Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBox1.SelectionChangeCommitted
    'Ophalen id artikel
    Dim klantid As Integer
    klantid = ComboBox1.SelectedValue

    Dim klantidstr As String
    klantidstr = klantid.ToString

    'Via query overige gegevens ophalen
    ' OLEDB select query 
    Dim myConnection As OleDbConnection
    Dim DBpath As String = "C:FacturatieCharelIjs.accdb"
    Dim sConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" amp; DBpath amp; ";Persist Security Info=True"
    myConnection = New OleDbConnection(sConnectionString)
    myConnection.Open()
    Dim SQLstr As String
    SQLstr = "SELECT * FROM tblKlant  WHERE KlantID = @id"
    Dim cmd As New OleDbCommand(SQLstr, myConnection)
    Dim da As New OleDbDataAdapter(cmd)
    Dim ds As New DataSet()

    cmd.Parameters.Add("@id", OleDbType.VarChar)
    cmd.Parameters(0).Value = klantid

    Try
        da.Fill(ds, "tblKlant")
        cmd.ExecuteNonQuery()
    Catch ex As Exception
        MsgBox("Can't load Web page" amp; vbCrLf amp; ex.Message)
        Return
    End Try

    DataGridView1.DataSource = ds.Tables("tblKlant")

End Sub
  

Ответ №1:

Для начала вы можете избавиться от всего этого кода в SelectionChangeCommitted обработчике событий. У вас есть типизированный DataSet , так что используйте его. Откройте конструктор наборов данных, дважды щелкнув набор данных в обозревателе решений. У вас должен быть TblKlantTableAdapter адаптер. Щелкните его правой кнопкой мыши и добавьте новый запрос. Добавьте отфильтрованный запрос и назовите методы FillByKlantID и GetDataByKlantID .

Вернитесь в конструктор форм, добавьте экземпляр вашего табличного адаптера и BindingSource. Привяжите BindingSource к tblKlant в вашем DataSet и привяжите свою сетку к BindingSource . Теперь, когда пользователь делает выбор, вы сначала очищаете таблицу в DataSet , затем получаете идентификатор из ComboBox и передаете его вызову этого FillByKlantID метода. Это позволит получить отфильтрованные данные из базы данных и заполнить DataTable . Поскольку DataTable привязан к BindingSource , а тот привязан к сетке, данные будут отображаться.

Комментарии:

1. Звучит заманчиво, у вас есть руководство или пример этого метода?