VB.net数据源过滤器

时间:2014-07-06 09:15:54

标签: vb.net datagridview combobox onselect

我有一个带数据源的数据网格视图和一个Acces表。 datagridview已经填满并完美,但现在我想创建一个带有过滤器可能性的额外Combobox。

这是我的页面加载功能:

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

此时组合框也填充了数据网格视图。 现在我在组合框上创建了一个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:\Facturatie\CharelIjs.accdb"
    Dim sConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & DBpath & ";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" & vbCrLf & ex.Message)
        Return
    End Try

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

End Sub

1 个答案:

答案 0 :(得分:0)

您可以在SelectionChangeCommitted事件处理程序中删除所有代码以获取开始。您有一个键入的DataSet所以请使用它。双击解决方案资源管理器中的DataSet,打开DataSet设计器。你应该有一个TblKlantTableAdapter适配器。右键单击它并添加新查询。添加已过滤的查询,并将方法命名为FillByKlantIDGetDataByKlantID

返回表单设计器,添加表适配器实例和BindingSource。将BindingSource绑定到DataSet中的tblKlant,然后将网格绑定到BindingSource。现在,当用户进行选择时,您首先清除DataSet中的表格,然后从ComboBox获取ID并将其传递给对该FillByKlantID方法的调用。这将从数据库中获取过滤后的数据并填充DataTable。由于DataTable绑定到BindingSource并且绑定到网格,因此将显示数据。