过滤器组合框后更改DataGridview

时间:2014-07-06 17:20:46

标签: vb.net winforms datagridview combobox

我正在尝试在组合框中选择过滤器后重新填充我的DataGridView。 这是我的代码,我尝试...此时代码正在清除DataGridview,只填充只有1个单元格的行... KlantID = 7

有什么想法吗?

Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBox1.SelectionChangeCommitted
    klantid = ComboBox1.SelectedValue

    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 = @klantid"


    Dim cmd As New OleDbCommand(SQLstr, myConnection)
    Dim da As New OleDbDataAdapter(cmd)
    Dim ds As New DataSet()

    cmd.Parameters.Add("@klantid", 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
    DataGridView1.DataMember = "tblKlant"
    DataGridView1.Refresh()
End Sub

1 个答案:

答案 0 :(得分:0)

为什么要在每个combobox_SelectionChange事件执行时填充记录。尝试仅过滤数据而不是查询执行。

并且,最好使用SelectedValueChanged事件而不是SelectionChange

Private Sub form_Load(sender As Object, e As EventArgs) Handles Me.Load
    //Fill your data here with DataView
    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 cmd As New OleDbCommand("SELECT * FROM tblKlant", myConnection)
    Dim da As New OleDbDataAdapter(cmd)
    Dim dt As New DataTable() 'Dont use dataset if your are not relating more than one tables

    cmd.Parameters.Add("@klantid", OleDbType.VarChar)
    cmd.Parameters(0).Value = klantid
    Try
        da.Fill(dt)
        dt.TableName = "tblKlant"
        cmd.ExecuteNonQuery()
        DataGridView1.DataSource = dt.DefaultView
        DataGridView1.DataMember = "tblKlant"
    Catch ex As Exception
        MsgBox("Can't load Web page" & vbCrLf & ex.Message)
        Return
    End Try

End Sub

Private Sub combobox_SelectedValueChanged(sender As Object, e As EventArgs) Handles combobox.SelectedValueChanged
    IF combobox.SelectedValue IsNot Nothing Then
        Dim dv As DataView = DirectCast(DataGridView1.DataSource, DataView)
        dv.RowFilter = "KlantID=" + combobox.SelectedValue.ToString()
    Else
        dv.RowFilter = vbNullString
    End IF
End Sub