COMBOBOX (ITEMDADATA)

FUTURA 14/11/2017 17:40:41
#477847
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 [Ô]
CLEVERTON 14/11/2017 17:57:11
#477848
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

FUTURA 14/11/2017 18:31:04
#477849
cara, uma coisa nativa em vb6, muito usada, e sem semelhança nativa em .net, é pra caba.....rssss
CLEVERTON 14/11/2017 18:40:06
#477850
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
FUTURA 14/11/2017 19:14:36
#477851
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.
JABA 14/11/2017 19:23:14
#477852
Resposta escolhida
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
CLEVERTON 14/11/2017 19:23:43
#477853
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

CLEVERTON 14/11/2017 19:24:26
#477854
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!
FUTURA 14/11/2017 22:11:50
#477859
Mais ai qual objeto do combo eu passo no select ?
JABA 14/11/2017 22:32:27
#477860
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.
CLEVERTON 14/11/2017 22:53:19
#477861
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.

Página 1 de 3 [23 registro(s)]
Tópico encerrado , respostas não são mais permitidas