2014-07-06 4 views
-1

나는 데이터 원본에 Acces 테이블이있는 datagridview가 있습니다. datagridview가 채워져 완벽하지만 이제는 필터 가능성이있는 추가 콤보 박스를 만들고 싶습니다.VB.net 데이터 소스 필터

이 페이지의 내 부하 기능에 : 콤보 상자는 또한 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 

. 이제 combobox에서 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 

답변

0

당신은 시작을 SelectionChangeCommitted 이벤트 처리기에서 모든 코드를 제거 할 수 있습니다. 형식이 DataSet이므로 사용하십시오. 솔루션 탐색기에서 DataSet을 두 번 클릭하여 DataSet 디자이너를 엽니 다. TblKlantTableAdapter 어댑터가 있어야합니다. 마우스 오른쪽 단추로 클릭하고 새 쿼리를 추가하십시오. 필터링 된 쿼리를 추가하고 메서드 이름을 FillByKlantIDGetDataByKlantID으로 지정합니다.

양식 디자이너로 돌아가서 테이블 어댑터 인스턴스와 BindingSource를 추가하십시오. BindingSourceDataSet에 바인딩하고 BindingSource에 눈금을 바인딩하십시오. 이제 사용자가 선택을하면 DataSet에서 표를 지우고 ComboBox에서 ID를 가져 와서 FillByKlantID 방법으로 전달합니다. 데이터베이스에서 필터링 된 데이터를 가져와 DataTable을 채 웁니다. DataTableBindingSource에 바인딩되어 있고 그리드에 바인딩되어 있기 때문에 데이터가 표시됩니다.

+0

소리가 좋습니다.이 튜토리얼이나이 방법의 예가 있습니까? – user3388946

관련 문제