У меня есть набор данных с несколькими столбцами, который содержит два выпадающих списка. Первый комбинированный список называется «cbxCampaign2», а второй комбинированный список называется «cbxPositionNo». Я заполняю оба поля, когда для нагрузок с результатами таблицы смотрите код здесь ...
'Populate DataGrid3 - Applicant Offers and Recruit
cmd = New SqlCommand("GetApplicantSuccessfulCampaigns", conn)
cmd.Parameters.AddWithValue("@AppID", Me.intAppID)
cmd.CommandType = CommandType.StoredProcedure
da3 = New SqlDataAdapter(cmd)
da3.Fill(ds, "CampignSuccess")
Me.cbxCampaign2.DataSource = ds.Tables("CampignSuccess")
Me.cbxCampaign2.DisplayMember = "CampaignName"
Me.cbxCampaign2.ValueMember = "ID"
' Also changed when Clicked in DGV3
cmd = New SqlCommand("SELECT ID, PositionNo + ', ' + Title As PositionName FROM TblPosition ORDER By PositionNo ASC", conn)
da3 = New SqlDataAdapter(cmd)
da3.Fill(ds, "PositionNames")
Me.cbxPositionNo.DataSource = ds.Tables("PositionNames")
Me.cbxPositionNo.DisplayMember = "PositionName"
Me.cbxPositionNo.ValueMember = "ID"
Затем я пытаюсь отфильтровать содержимое второго комбинированного списка на основе значения первого комбинированного списка.
Пока у меня есть два события CellBegin Edit и CellEndEdit и приведение нового «dgvcbPositionNo», добавлен новый источник данных, но он не работает и не выдает ошибку! Я добавил несколько окон сообщений, и они отображают правильные результаты! Я чувствую, что что-то упустил, но не уверен, где !!!
См. Код ниже ...
Private Sub DataGridView3_CellBeginEdit(sender As Object, e As DataGridViewCellCancelEventArgs) Handles DataGridView3.CellBeginEdit
If e.ColumnIndex = 3 Then
MsgBox(Me.DataGridView3.CurrentRow.Cells("cbxCampaign2").Value)
' Set the combobox cell datasource to the filtered BindingSource
Dim dgvcbPostionNo As DataGridViewComboBoxCell = DirectCast(DataGridView1(e.ColumnIndex, e.RowIndex), DataGridViewComboBoxCell)
cmd = New SqlCommand("SELECT ID, Title +', ' + PositionNo As PositionName FROM TblPosition WHERE ID IN (SELECT PositionID FROM TblCampaignPositions WHERE CampaignID = @CampID) ORDER By PositionNo", conn)
cmd.Parameters.AddWithValue("@CampID", Me.DataGridView3.CurrentRow.Cells("cbxCampaign2").Value)
da3 = New SqlDataAdapter(cmd)
If Not IsNothing(ds.Tables("PositionFiltered")) Then
ds.Tables("PositionFiltered").Rows.Clear()
End If
da3.Fill(ds, "PositionFiltered")
MsgBox(ds.Tables("PositionFiltered").Rows.Count)
dgvcbPostionNo.DataSource = ds.Tables("PositionFiltered")
dgvcbPostionNo.DisplayMember = "PositionName"
dgvcbPostionNo.ValueMember = "ID"
End If
End Sub
Private Sub DataGridView3_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView3.CellEndEdit
If e.ColumnIndex = 3 Then
MsgBox("A")
' Set the combobox cell datasource to the filtered BindingSource
Dim dgvcbPostionNo As DataGridViewComboBoxCell = DirectCast(DataGridView1(e.ColumnIndex, e.RowIndex), DataGridViewComboBoxCell)
dgvcbPostionNo.DataSource = ds.Tables("PositionNames")
End If
End Sub
Конечный класс