Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jp_Masiero

Preencher dinamicamente um combo dentro de um GridView

Recommended Posts

Pessoal Boa noite,

 

Estou com um problema, tenho um grid com duas colunas, uma coluna e normal vem do banco e cria as linhas, a outra coluna foi uma coluna que eu adicionei via código que e uma coluna que contem um combobox por linha.

Eu estou tentando preencher este combo com uma tabela do meu banco porem esta dando este erro:

 

Complex DataBinding accepts as a data source either an IList or an IListSource.

 

Este e a função que estou usando para preencher o combobox:

    Public Function preencheCombo(ByVal combo As DataGridViewComboBoxColumn, ByVal sql As String, ByVal displaymenber As String, ByVal valuemenber As String) As DataGridViewComboBoxColumn
        Try
            Dim cmd As New SqlCommand
            Dim tab As New DataTable
            cmd.CommandText = sql

            tab = retdadosTab(cmd)
            combo.DataSource = tab
            combo.DisplayMember = displaymenber
            combo.ValueMember = valuemenber
            cmd = Nothing
            tab = Nothing
            Return combo
        Catch ex As Exception
            Throw New Exception("Erro ao preencher combobox. " & ex.Message)
        Finally
            combo = Nothing
        End Try
    End Function

Quando eu elimino o datasource do combo e percorro um datatable com um for e vou dando um itens.add ai não da erro, porem não posso fazer assim pois quando alguém cadastrar um novo valor os index dos itens mudarão e ai ira mudar os valores já cadastrados no banco.

 

Alguem já precisou fazer isso?



    Public Function preencheCombo(ByVal combo As DataGridViewComboBoxColumn, ByVal sql As String, ByVal displaymenber As String, ByVal valuemenber As String) As DataGridViewComboBoxColumn
        Try
            Dim cmd As New SqlCommand
            Dim tab As New DataTable
            cmd.CommandText = sql

            tab = retdadosTab(cmd)
            combo.DataSource = tab
            combo.DisplayMember = displaymenber
            combo.ValueMember = valuemenber
            cmd = Nothing
            tab = Nothing
            Return combo
        Catch ex As Exception
            Throw New Exception("Erro ao preencher combobox. " & ex.Message)
        Finally
            combo = Nothing
        End Try
    End Function

O código ficou bagunçado estou postando de novo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, mais como eu faço isso? Por que eu estou preenchendo o combo com um datatable na verdade mão um dataset. e mesmo assim ta dando esse erro, eu tentei utilizar um array mas o problema está quando eu dou um selectedvalue que não da certo dai.



Esta e a função que estou usando, postei fora do code pois esta ficando bagunçado.

 

Public Function preencheCombo(ByVal combo As ComboBox, ByVal sql As String, ByVal displaymenber As String, ByVal valuemenber As String) As ComboBox

Try

Dim cmd As New SqlCommand

Dim tab As New DataTable

cmd.CommandText = sql

tab = retdadosTab(cmd)

combo.DataSource = tab

combo.DisplayMember = displaymenber

combo.ValueMember = valuemenber

cmd = Nothing

tab = Nothing

Return combo

Catch ex As Exception

Throw New Exception("Erro ao preencher combobox. " & ex.Message)

Finally

combo = Nothing

End Try

End Function

Public Function preencheCombo(ByVal combo As DataGridViewComboBoxColumn, ByVal sql As String, ByVal displaymenber As String, ByVal valuemenber As String) As DataGridViewComboBoxColumn

Try

Dim cmd As New SqlCommand

Dim tab As New DataTable

cmd.CommandText = sql

tab = retdadosTab(cmd)

combo.DataSource = tab

combo.DisplayMember = displaymenber

combo.ValueMember = valuemenber

cmd = Nothing

tab = Nothing

Return combo

Catch ex As Exception

Throw New Exception("Erro ao preencher combobox. " & ex.Message)

Finally

combo = Nothing

End Try

End Function

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.