Jump to content
Sign in to follow this  
laboss

Datagridview e ComboBox(e)

Recommended Posts

laboss

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

Share this post


Link to post
Share on other sites
Caça

Certifica-te se o valor que estás a passar existe na propriedade ValueMember da combobox


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
laboss

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

Share this post


Link to post
Share on other sites
Caça

Tenta passar o valor como string

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


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
laboss

É 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

Share this post


Link to post
Share on other sites
Caça

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

Share this post


Link to post
Share on other sites
laboss

Esta a ser carregada bem :S podes mandar o teu codigo para tentar por aqui a dar noutro formulario?

Share this post


Link to post
Share on other sites
Caça

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

Share this post


Link to post
Share on other sites
laboss

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?

Share this post


Link to post
Share on other sites
Caça

Penso que não, mas carrega directamente o DataTable sem ser através do DataReader, para verificar se o problema está ai


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
laboss

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

Share this post


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
Sign in to follow this  

×
×
  • 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.