COMBOBOX (ITEMDADATA)

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

COMBOBOX (ITEMDADATA)

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#477847 - 14/11/2017 17:40:41

FUTURA
.
Cadast. em:Maio/2004


Última edição em 14/11/2017 17:42:01 por FUTURA

Pessoal, no vb6 eu uso combobox em vários forms, e carrego nele o conteúdo de tabelas, que servem para filtros, usando as propriedades text e itemdata. estou tentando usar no vb.net as que eu achei na net, mas não esta dando certo, alguém usa ?.

estou percorrendo um datareader e preenchendo o combo assim:

While Dr.Read()
    cmbcampos.Items.Add(Dr("desccampo"))
    cmbcampos.ValueMember = Dr("idcampo")
End While

mas na hora do select, o valuemenber, é sempre do último adicionado.

Sql = "select desccampo,idcampo from cce_campos where idgru = " & cmbgrupos.ValueMember & " order by desccampo "




#477848 - 14/11/2017 17:57:11

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

Última edição em 14/11/2017 17:57:49 por CLEVERTON

Pq vc não passa os dados DO SEU DATAREADER para uma classe e atribue o datasource ?

dessa forma vc consegue pegar qualquer dado.

Quanto tempo não escrevi em VB viu.

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim clientes As List(Of Cliente) = New List(Of Cliente)

        Dim cliente1 As Cliente = New Cliente()
        Dim cliente2 As Cliente = New Cliente()
        Dim cliente3 As Cliente = New Cliente()

        cliente1.Codigo = 1
        cliente1.Nome = "CLEVERTON"
        cliente1.DataNasc = New DateTime(2017, 11, 14)

        cliente2.Codigo = 2
        cliente2.Nome = "JOSÉ"
        cliente2.DataNasc = New DateTime(1985, 7, 6)

        cliente3.Codigo = 3
        cliente3.Nome = "MARIA"
        cliente3.DataNasc = New DateTime(1933, 9, 2)

        clientes.Add(cliente1)
        clientes.Add(cliente2)
        clientes.Add(cliente3)


        ComboBox1.DataSource = Nothing
        ComboBox1.DataSource = clientes
        ComboBox1.DisplayMember = "Nome"
        ComboBox1.ValueMember = "Codigo"
    End Sub

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

        Dim clienteSelecionado As Cliente = ComboBox1.SelectedItem

        MessageBox.Show(clienteSelecionado.Nome & "    --    " + clienteSelecionado.Codigo.ToString() _
            & "   --   " & clienteSelecionado.DataNasc.ToString("dd/MM/yyyy"))
    End Sub
End Class
Public Class Cliente

    Public Property Codigo As Int32
    Public Property Nome As String
    Public Property DataNasc As DateTime

End Class





#477849 - 14/11/2017 18:31:04

FUTURA
.
Cadast. em:Maio/2004


cara, uma coisa nativa em vb6, muito usada, e sem semelhança nativa em .net, é pra caba.....rssss



#477850 - 14/11/2017 18:40:06

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Mas se vc for parar pra analisar, continua nativa e ainda melhorada.
vc pode recuperar um Objeto completo em vez de só o Id obtido pelo itemdata



#477851 - 14/11/2017 19:14:36

FUTURA
.
Cadast. em:Maio/2004


Mas da um pouco mais de trabalho né ?, no vb6 ja ta la prontinho. O detalhe é que preciso guardar o índice de cada item no combo, para uso posterior em um select, de acordo com o texto selecionado no combo... No itemdata do vb6 , eu guardo o código do cadastro.



Resposta escolhida #477852 - 14/11/2017 19:23:14

JABA
CABO FRIO
Cadast. em:Agosto/2005


No Vb6 é assim porque ele é orientado a eventos. Quando você começar a pensar de forma orientada a objetos, vai ver o quanto faz sentido fazer dessa maneira. Confira abaixo algo sobre isso:

www.macoratti.net/vbn_idta.htm

_______________________________________________________________________________________________

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



#477853 - 14/11/2017 19:23:43

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Bom, eu pelo menos eu não vejo diferença.

Mas no exemplo que te passei, faz a mesma coisa.

Eu uso e abuso de objetos, eu tenho um projeto que fornece somente objetos.  ( Listas e Entidades do Dominio ou Customizadas )
Fica moleza quando se pega o jeito.

Lembre que vc está no .NET, vc não deve pensar como VB6. Lá no VB6 não tem orientação a objeto    





#477854 - 14/11/2017 19:24:26

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

Última edição em 14/11/2017 19:25:31 por CLEVERTON

Citação:
:
No Vb6 é assim porque ele é orientado a eventos. Quando você começar a pensar de forma orientada a objetos, vai ver o quanto faz sentido fazer dessa maneira.


Exatamente!




#477859 - 14/11/2017 22:11:50

FUTURA
.
Cadast. em:Maio/2004


Mais ai qual objeto do combo eu passo no select ?



#477860 - 14/11/2017 22:32:27

JABA
CABO FRIO
Cadast. em:Agosto/2005


Citação:
Mais ai qual objeto do combo eu passo no select ?


Você pega o objeto assim:
ComboBox1.SelectedItem


OBS: Na hora de encerrar o tópico, pontue o CLEVERTON.

_______________________________________________________________________________________________

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



#477861 - 14/11/2017 22:53:19

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Citação:
:
Mais ai qual objeto do combo eu passo no select ?


Vamos lá. eu sei que não é abordagem mais correta.
Mas tem uma forma de vc trazer todos as tabelas para dentro do seu projeto, ou até criar um projeto somente com sua entidades do dominio.

1 - Adicione um novo projeto a sua solução do tipo Class Library
2 - Cria duas pastas dentro desse projeto ( Domain e View )
3 - clica com o direito na pasta Domain > Add New Item
4 - Escolha a Seção Data na lista da esquerda
5 - Escolha o template ADO.NET Entity Data Model
6 - Vai aparecer uma janela e vc clica em Code First From DataBse, depois clica em Next
7 - Você vai colocar seus dados de conexão, depois clica em Next
8 - Escolhe as tabelas que vc quer transformar em classe.
9 - Clica em Finish

Pronto, vc vai ter todos os objetos do seu banco de dados.

DETALHE:
O Entity Framework fará um mapa de tudo na classe Model1.vb

Caso vc não tenha intimidade, e não queria trabalhar com Entity Framework, vc deleta essa classe e só aproveita os objetos criados.





 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