COMBOBOX (ITEMDADATA)

CLEVERTON 14/11/2017 22:54:37
#477862
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.
FUTURA 16/11/2017 09:03:38
#477876
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 ?
FUTURA 16/11/2017 10:21:51
#477878
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. ?
CLEVERTON 16/11/2017 11:46:05
#477881
CLEVERTON 16/11/2017 11:53:01
#477882
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

FUTURA 16/11/2017 12:01:51
#477884
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.
CLEVERTON 16/11/2017 12:04:25
#477885
Copia esse ultimo código que coloquei, vai dar certinho.

esse MeuItemData é POG lá do macoratti. kkkk
FUTURA 16/11/2017 12:44:50
#477886
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..
CLEVERTON 16/11/2017 12:53:11
#477887
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 )
JABA 16/11/2017 14:43:43
#477888
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
Página 2 de 3 [23 registro(s)]
Tópico encerrado , respostas não são mais permitidas