#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. Звучит заманчиво, у вас есть руководство или пример этого метода?