PASSAR VALOR CAMADA

ALTAIR148 10/08/2012 23:11:29
#407755
Boa noite,

Pessoal, tenho as seguintes propriedades em uma classe DTOFornecedor:

[ô]===========================================
Private _Fornecedor_ID
Property Fornecedor_ID
Get
Return _Fornecedor_ID
End Get
Set (byval Value)
_Fornecedor_ID = value
End Set
End Property
[ô]===========================================
Private _Fornecedor_UF_ID
Property Fornecedor_UF_ID
Get
Return _Fornecedor_UF_ID
End Get
Set (byval Value)
_Fornecedor_UF_ID = value
End Set
End Property

[ô]============================================
Private _Fornecedor_GrupoFornecedor_ID
Property Fornecedor_GrupoFornecedor_ID
Get
Return _Fornecedor_GrupoFornecedor_ID
End Get
Set (byval Value)
_Fornecedor_GrupoFornecedor_ID = value
End Set
End Property
[ô]===========================================


No form eu faço algo do tipo

Dim Fornecedor as New DTOFornecedor

Fornecedor.Fornecedor_ID = Fornecedor_ID.text
Fornecedor.Fornecedor_UF_ID = Fornecedor_UF_ID.text
Fornecedor.Fornecedor_GrupoFornecedor_ID = Fornecedor_GrupoFornecedor_ID.text



Então, por exemplo no form de Fornecedores onde tem o código acima eu tenho uns 30 campos e o nome das propriedades na DTOFornecedor é o mesmo nome, como que eu faria para que eu diminuísse esse código?

Obrigado.
JABA 10/08/2012 23:39:31
#407757
Primeiramente, você poderia utilizar as propriedades autoimplementadas.

ex:

Public Class Fornecedor
Property ID as Integer
Property UF as String
End Class

Desta forma o .Net cria automaticamente um atributo privado (ele fica oculto) e se você quiser utiliza-lo, poderia fazer assim:

_ID = 1
_UF= [Ô]Rio de Janeiro[Ô]

Quando você realmente precisar fazer um validacao no atributo dentro da propriedade, ai você cria a propriedade do jeito classico mesmo.

Outra coisa:

Evite ficar escrevendo o nome da classe nas propriedades, isso suja muito o codigo. Faça conforme eu fiz acima. Olha como fica mais claro.
_________________________________________________________________________________________________________

Respondendo a sua pergunta, você pode usar reflexão para preencher as propriedades e deixar o codigo mais limpo e reaproveitável. Essa técnica é bem avançada. Procure saber sobre o assunto.

vlw

ALTAIR148 10/08/2012 23:46:23
#407758
Então, pesquisei em vários lugares sobre o Reflection e não encontrei nada que eu conseguisse entender.
JABA 11/08/2012 00:04:03
#407759
Você poderia usar reflexao para vasculhar o seu obj e pegar os dados e popular os seus controles.
O bom que fazendo para um objeto serve para todos os outros.

veja isso aqui:

http://www.bileras.com.br/reflection-parte-4-propriedades/

vlw

ALTAIR148 11/08/2012 07:55:26
#407762
Dei uma olhada, mas não encontrei nada a respeito de como reaproveitar o código.
FOXMAN 11/08/2012 15:06:37
#407774
Resposta escolhida
Altair, lembra o projeto que haviamos iniciado em C# ??
Ele faz exatamente isso.

No entanto é necessário alguns padrões.

Nome do campo no formulario = txtNomeFornecedor.
Nome do Campo na Classe = NomeFornecedor.
Nome do Campo no banco = NomeForncedor.

Se utilizar este padrão, é possível utilizar o Reflection para popular os campos ou popular/alterar os dados no banco.

Vou ver se consigo um tempinho aqui para disponibilizar um exemplo para vc em vb.net

Mas basicamente para pegar os nomes da propriedades seria algo assim :

// Pessoa = new BLLPessoa();
[ô]Cria uma nova instancia do objeto BLLPessoa
Dim Pessoa as new BLLPessoa()
//PropertyInfo[] propriedades = Pessoa.GetType().GetProperties();
[ô]Cria uma lista com as propriedades da classe BLLPessoa
Dim Propriedades = Pessoa.GetType().GetProperties()
//System.Type type = Pessoa.GetType();
[ô]Cria uma lista com os tipos de dados das classe BLLPessoa
Dim type = Pessoa.GetType()


Agora basta percorrer as propriedades e tipos criados para saber o nome do campo.
Se vc criar uma função que irá comparar os nomes dos campos com os nomes dos campos na classe, basta ter como parametro um objeto do tipo Control, e quando instanciar a Função passar como parametros os controles do formulario atual.









Tópico encerrado , respostas não são mais permitidas