Jump to content

Datagridview e ComboBox(e)


Recommended Posts

Pois e ppl ando aqui ao boxe com uma coluna do tipo combobox numa datagridview! Tenho a dgv criada e carrego os dados da combobox assim:

Dim coluna As DataGridViewComboBoxColumn = DirectCast(dgvMovimentos.Columns(5), DataGridViewComboBoxColumn)
        With coluna
            .DataSource = ProStocks.Produtos.CarregarUnidadesDataTable
            .DisplayMember = "UN_Codigo"
            .ValueMember = "UN_ID"
        End With

Depois carrego dados na grid consoante o ID posto na primeira célula. Tudo muito bem ate aqui mas quando faço isto:

dgvMovimentos.Rows(e.RowIndex).Cells(5).Value = DadosProdutos.IDUnidades

Da-me este erro:

O valor DataGridViewComboBoxCell nao é valido, acho que isto esta acontecer pk o value seleciona apartir do DisplayMember e não o index...

Existe forma de seleccionar o registo pedo ID (ValueMember)

Cumprimentos

Link to post
Share on other sites

Sim o valor existe, se meter o displaymember como o U_ID ele tem la 1 e o valor que vem da estrutura é um ou seja fica

gvMovimentos.Rows(e.RowIndex).Cells(5).Value = 1

e continua a dar erro, se o valor vier null ou 0 ele nao associa o registo a combobox ou seja passa a frente esse bloco de codigo

If Not DadosProdutos.IDUnidades.Equals(0) Then
            dgvMovimentos.Rows(e.RowIndex).Cells(5).Value = CType(DadosProdutos.IDUnidades, Integer)
        End If

PrintScreen

prtscrpp.png

Uploaded with ImageShack.us

Link to post
Share on other sites

É UN_ID Desculpa errei la em cima :S

Tentei passar o valor como string e nao deu.... :S estou a bater mal com esta dgv :O ele na cbx nao seleciona nda, apenas mete o valor pra la como se de um item novo se trata-se

Link to post
Share on other sites

Se a combobox estiver preenchida, se o valor que estás a passar conste na combobox, tem de funcionar

Acabei agora de simular e consegui.

Verifica se o DataSource da combobox foi correctamente carregado

Pedro Martins

Não respondo a duvidas por PM

Link to post
Share on other sites

Não é nada de mais

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim dt As New DataTable
        dt.Columns.Add("ID")
        dt.Columns.Add("Descr")
        dt.Rows.Add("1", "fdfdsdf")
        dt.Rows.Add("2", "fdfdsdfdfdf")
        Column1.DataSource = dt
        Column1.DisplayMember = "Descr"
        Column1.ValueMember = "ID"
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        DataGridView1.Rows(0).Cells(0).Value = "2"
    End Sub

Ao clicar no botão automaticamente a combobox ficou com o texto "fdfdsdfdfdf", correspondente ao ID 2

Pedro Martins

Não respondo a duvidas por PM

Link to post
Share on other sites

Tem haver com o meu datatable, com o teu datatable funciona perfeitamente :S

eu estou a enviar os dados para o DataTable Assim:


Public Shared Function CarregarUnidadesDataTable() As DataTable

            Try
                Dim Ligacao As New SqlConnection(ConnectionString)
                Dim Comando As New SqlCommand
                With Comando
                    .CommandText = "SELECT UN_ID, UN_Codigo, UN_Desc FROM ProdutosUnidades ORDER BY UN_Codigo ASC"
                    .Connection = Ligacao
                End With
                Ligacao.Open()

                Dim DataReader As SqlDataReader = Comando.ExecuteReader
                Dim DataTable As New DataTable
                DataTable.Load(DataReader)

                Return DataTable
            Catch ex As Exception
                Return New DataTable
            End Try
        End Function 

Existe algum problema nisto?

Link to post
Share on other sites

Boas desculpa so rsp agora mas nao tive oportunidade de vir mais cena eu fiz desta maneira:

Try
            Dim Ligacao As New SqlConnection(ConnectionString)
            Dim Comando As New SqlCommand
            With Comando
                .CommandText = "SELECT UN_ID, UN_Codigo, UN_Desc FROM ProdutosUnidades ORDER BY UN_Codigo ASC"
                .Connection = Ligacao
            End With
            Ligacao.Open()

            Dim DataReader As SqlDataReader = Comando.ExecuteReader
            While DataReader.Read()
                dt.Rows.Add(DataReader("UN_ID"), DataReader("UN_Codigo"), DataReader("UN_Desc"))
            End While

        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try


        UN.DataSource = dt
        UN.DisplayMember = "UN_Codigo"
        UN.ValueMember = "UN_ID"

Assim funciona na perfeição não entendo porque que não funciona da com o meu procedimento :s

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.