COMBOBOX (ITEMDADATA)

 Tópico anterior Próximo tópico Novo tópico

COMBOBOX (ITEMDADATA)

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#477862 - 14/11/2017 22:54:37

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Se sua aplicação não tiver um grande volume de dados, sugiro vc trabalhar com ENtity Framework, vc terá uma série de vantagens.

Dá umas olhadas nos tutoriais e videos, vc vai ver como vale a pena. vai se livrar de Strings de SQL dentro de seu código.



#477876 - 16/11/2017 09:03:38

FUTURA
.
Cadast. em:Maio/2004


Última edição em 16/11/2017 09:08:42 por FUTURA

Pessoal, ta meio perdido aqui. seguindo o exemplo do macoratti, criei a classe pública:

Public Class MeuItemData
    Public Valor As Object
    Public Descricao As String
    Public Sub New(ByVal NovoValor As Object, ByVal NovaDescricao As String)
        Valor = NovoValor
        Descricao = NovaDescricao
    End Sub
    Public Overrides Function ToString() As String
        Return Descricao
    End Function
End Class

CARREGUEI O COMBO:

        Carregar_Banco()
        Sqlcmd = New SqlCommand("select descgru,idgru from cce_grupos order by descgru", Cnn)
        Dr = Sqlcmd.ExecuteReader
        cmbgrupos.Items.Clear()
        While (Dr.Read())
            'cmbgrupos.Items.Add(Dr("descgru"))
            'cmbgrupos.ValueMember = Dr("idgru")
            cmbgrupos.Items.Add(New MeuItemData(Dr("idgru"), Dr("descgru")))
        End While
        Dr.Close()
        Cnn.Close()
        Cnn.Dispose()
      
MAS AO PASSAR O SELECT, EM UMA OUTRA FUNÇÃO, DIZ QUE "MEMBRO PÚBLICO, MeuItemData não encontrado. o que esta faltando ?:


            Sql = "select desccampo,idcampo from cce_campos where idgru = " & cmbgrupos.SelectedItem.MeuItemData.Valor & " order by desccampo "
            Sqlcmd = New SqlCommand(Sql, Cnn)
            Dr = Sqlcmd.ExecuteReader
        
Pois a idéia de guardar esses valores no combo, são para usar em filtros, em outras funções ou objetos, e neste caso a classe não fica disponível ?



#477878 - 16/11/2017 10:21:51

FUTURA
.
Cadast. em:Maio/2004


Pessoal, na questão acima, tirei a propriedade "selecteditem.meuitemdata.valor" , e passei direto "selecteditem.valor", ai deu certo. Porém, a propriedade valor que foi criada na classe, quando digito o "objeto." , não aparece disponível como as demais,  mas funciona.. é isso mesmo ?, ela não aparece na lista porque não é nativa do combo, neste caso. ?



#477881 - 16/11/2017 11:46:05

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

Última edição em 16/11/2017 11:46:42 por CLEVERTON

Dá uma olhada de como funciona o valueMember

https://msdn.microsoft.com/pt-br/library/system.windows.forms.listcontrol.valuemember(v=vs.110).aspx




#477882 - 16/11/2017 11:53:01

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

Última edição em 16/11/2017 12:01:34 por CLEVERTON

Olha cara, sinceramente eu acho que vc tá perdendo tempo, de repente vc está tentando programar em VB.NET com cabeça de VB6.

vou tentar adequar seu código aqui:


CRIA A CLASSE PARA SUA TABELA

Public Class cce_grupos
    Public Property idgru As Int32
    Public Property descgru As String
End Class



    Carregar_Banco()
  Dim Registros As List(Of cce_grupos) = New List(Of cce_grupos)

        Sqlcmd = New SqlCommand("select descgru,idgru from cce_grupos order by descgru", Cnn)
        Dr = Sqlcmd.ExecuteReader

        While (Dr.Read())
          Dim novoItem As cce_grupos = New cce_grupos()
           novoItem.idgru  = Dr("idgru"))
            novoItem.descgru = Dr("descgru"))
             Registros.Add(novoItem)
        End While
        Dr.Close()
        Cnn.Close()
        Cnn.Dispose()

ComboBox1.DataSource = Nothing
        ComboBox1.DataSource = Registros
        ComboBox1.DisplayMember = "descgru"
        ComboBox1.ValueMember = "idgru"
End Sub


PRA RECUPERAR O ID
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If (ComboBox1.SelectedValue = Nothing) Then Exit Sub

MessageBox.Show(ComboBox1.SelectedValue.ToString())
    End Sub





#477884 - 16/11/2017 12:01:51

FUTURA
.
Cadast. em:Maio/2004


sim, estou com essa dificuldade , com a cabeça em vb6 mesmo, mas vou chegar la... agradeço muito sua ajuda. Na questão acima, reparei que ele jogou essa função no meu form:

Private Function MeuItemData(p1 As Object) As Integer
        Throw New NotImplementedException
    End Function

só ai funcionou, porque a classe, eu havia criado um novo class module. Vou tentar readaptar conforme vc passou.



#477885 - 16/11/2017 12:04:25

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Copia esse ultimo código que coloquei, vai dar certinho.

esse MeuItemData é POG lá do macoratti. kkkk



#477886 - 16/11/2017 12:44:50

FUTURA
.
Cadast. em:Maio/2004


entendi... vou fazer isso, e posto o resultado... Uma outra dúvida, sobre datareader, a maneira correta de verificar se ele retornou registros, seria DR. read ou Dr.hasrows ?, percebi que se tem apenas 1 registro no select, e uso o hasrows, parece que da falha..



#477887 - 16/11/2017 12:53:11

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Dá o Read() mesmo e passa  os dados sempre para o objeto como está no ultimo código.

Ai vc testa a quantidade de registros pelo Objetos usando Registros.Count ( depois do while é claro )



#477888 - 16/11/2017 14:43:43

JABA
CABO FRIO
Cadast. em:Agosto/2005


Citação:
Pessoal, na questão acima, tirei a propriedade "selecteditem.meuitemdata.valor" , e passei direto "selecteditem.valor", ai deu certo. Porém, a propriedade valor que foi criada na classe, quando digito o "objeto." , não aparece disponível como as demais,  mas funciona.. é isso mesmo ?, ela não aparece na lista porque não é nativa do combo, neste caso. ?


Sim, está correto. A propriedade "valor" não apareceu quando você digitou-a na IDE porque o selecteditem é do tipo object, e, nesse caso, precisaria de uma conversão. Ex:

dim valor = CType(selecteditem, MeuItemData).Valor


_______________________________________________________________________________________________

Se a alma ou espírito são imateriais, como eles fazem para se localizarem quando o corpo está em movimento?



 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por CLEVERTON em 17/11/2017 11:13:57