vb.net DataGridViewCombobox фильтрует содержимое второго комбинированного списка dgv на основе первого комбинированного списка dgv - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть набор данных с несколькими столбцами, который содержит два выпадающих списка. Первый комбинированный список называется «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

Конечный класс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...