Oiê Na coluna combobox do codigo abaixo de teste, quando clicado, no botão dropdown, abre a lista de dados filtrados, porém ao sair do evento beginEdit dá um erro que não consigo encontrar, podem dar uma mãozinha para debugar, pois estou dependendo da solução deste problema para dar sequencia ao projeto onde utilizarei este cenário muitas vezes. O que pude observar é que o evento _celEndEdit EM VERMELHO não está ressetando o bindingSource territoriesBS, pdem me dizer porquê?. grato takeo Imports System Imports System.Data Imports System.Data.SqlClient Imports System.Windows.Forms Imports System.Collections.Generic Imports System.Drawing
Public Class Form1 Private territoriesBS As New BindingSource Private regionBS As New BindingSource Private m_cbxTerritories As DataGridViewComboBoxColumn
Private Sub form1_Load( _ ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles Me.Load
Dim strcon As String = "data source=MAQTAKEO;initial catalog=northwind;integrated security=true" Dim objcon As New SqlConnection(strcon) Dim ds As New DataSet Dim strCmd1 As String = "SELECT * FROM territories" Dim strCmd2 As String = "SELECT * FROM region"
Dim adpTerritories As New SqlDataAdapter(strCmd1, objcon) Dim adpRegion As New SqlDataAdapter(strCmd2, objcon) objcon.Open() adpRegion.Fill(ds, "Region") adpTerritories.Fill(ds, "territories")
' Setup BindingSource for filtered view.
Dim dv As DataView = New DataView(ds.Tables("region")) regionBS.DataSource = dv objcon.Close() dgv1.DataSource = regionBS
' hide the auto-generated regionId column. dgv1.Columns("regionId").Visible = False
Dim dv1 As DataView = New DataView(ds.Tables("territories")) territoriesBS = New BindingSource territoriesBS.DataSource = dv1
'seta a posição da coluna no datagridview. m_cbxTerritories = New DataGridViewComboBoxColumn m_cbxTerritories.DisplayIndex = 2 m_cbxTerritories.HeaderText = "territories"
' This column is bound to the Products.CategoryID field. m_cbxTerritories.DataPropertyName = "regionId"
' Esta coluna é linkado para o campo terriories description. m_cbxTerritories.DataSource = territoriesBS m_cbxTerritories.DisplayMember = "TerritoryDescription" m_cbxTerritories.ValueMember = "RegionID" ' Add the column. dgv1.Columns.Add(m_cbxTerritories) End Sub
Private Sub dgv1_CellBeginEdit( _ ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) _ Handles dgv1.CellBeginEdit
If (e.ColumnIndex = m_cbxTerritories.Index) Then
' Set the combobox cell datasource to the filtered BindingSource Dim dgcb As DataGridViewComboBoxCell = CType(dgv1(e.ColumnIndex, e.RowIndex), DataGridViewComboBoxCell) dgcb.DataSource = territoriesBS
' Filter the BindingSource based upon the region selected Me.territoriesBS.Filter = "RegionID = " & dgv1((e.ColumnIndex - 2), e.RowIndex).Value.ToString
End If
End Sub
Private Sub dgv1_CellEndEdit( _ ByVal sender As Object, _ ByVal e As DataGridViewCellEventArgs) _ Handles dgv1.CellEndEdit If (e.ColumnIndex = m_cbxTerritories.Index) Then ' Reset combobox cell to the unfiltered BindingSource Dim dgcb As DataGridViewComboBoxCell = CType(dgv1(e.ColumnIndex, e.RowIndex), DataGridViewComboBoxCell) dgcb.DataSource = territoriesBS 'unfiltered() ' Me.territoriesBS.RemoveFilter() End If End Sub
Oi Gente Quero complementar o post anterior. O evento cellEndEdit, que está em vermelho no post anterior é disparado quando se clica em outra célula ou mesmo dentro da mesma célula para sair, então quando clicar por ex, quando dou um clik numa célula do combobox, é disparado o evento cellBeginEdit onde faço a filtro dos dados que é efetuado, mas automaticamente o framework varre todas as celulas da coluna combobox, aí dá o erro por que ainda op cellEndEdit não foi disparado. Logo tenho que achar uma alternativa para ressetar o dataSource sem o filtro, de modo que o framework possa fazer seu papel corretamente. Porem n/ao encontrei como, alguem tem alguma sugest/ao? takeo .
Oi gente acabei descobrindo como fazer funcionar o filtro ao clickar no botão drodownlist do cbx. No evento CellVeginEdit faço uma chamada de uma query selecionada por parametro e atualizo o bindingsource, e no evento CellEndEdit atualizo o bindingsource com a fonte original. Funcionou perfeito. até mais takeo
Oi Gente Quero complementar o post anterior. O evento cellEndEdit, que está em vermelho no post anterior é disparado quando se clica em outra célula ou mesmo dentro da mesma célula para sair, então quando clicar por ex, quando dou um clik numa célula do combobox, é disparado o evento cellBeginEdit onde faço a filtro dos dados que é efetuado, mas automaticamente o framework varre todas as celulas da coluna combobox, aí dá o erro por que ainda op cellEndEdit não foi disparado. Logo tenho que achar uma alternativa para ressetar o dataSource sem o filtro, de modo que o framework possa fazer seu papel corretamente. Porem n/ao encontrei como, alguem tem alguma sugest/ao? takeo .
Oi gente acabei descobrindo como fazer funcionar o filtro ao clickar no botão drodownlist do cbx. No evento CellVeginEdit faço uma chamada de uma query selecionada por parametro e atualizo o bindingsource, e no evento CellEndEdit atualizo o bindingsource com a fonte original. Funcionou perfeito. até mais takeo