COMBOBOX (ITEMDADATA)
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 [Ô]
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 [Ô]
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.
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
cara, uma coisa nativa em vb6, muito usada, e sem semelhança nativa em .net, é pra caba.....rssss
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
vc pode recuperar um Objeto completo em vez de só o Id obtido pelo itemdata
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.
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
www.macoratti.net/vbn_idta.htm
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
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
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!
Mais ai qual objeto do combo eu passo no select ?
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.
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 encerrado , respostas não são mais permitidas