Posts
Ola Vinicius,
O get e o set são recursos usados para definir propriedades para um objeto no conceito de orientação à objeto.
O Get recebe o valor e o Set aplica este valor numa instancia do objeto.
Fields, propriedades e atributos são a mesma coisa.
Numa classe vpcê os métodos e as propriedades ou atributos da mesma.
Para ficar mais claro, vou exemplificar com código:
//Atributo privado
private string _nome;
//Propriedade publica
public string Nome
{
get { return _nome; }
set { _nome= value; }
}
Para fazer a instancia deste objeto basta chamar:
NomeDaClasse.Nome = "Luiz Maia";
E para pegar o valor, mesma coisa:
string teste = NomeDaClasse.Nome;
Agora um exemplo de classe e suas propriedades, veja abaixo um diagrama de classes:
A Classe aluno possui duas propriedades: Codigo e nome.
E não possui método, mas poderia ter como por exemplo: RecuperarMaterias();
Espero ter ajudado.
Abraços
Att
Luiz Maia
22/01/2009
Vinicius Climaco
Porque a questão é a seguinte, tenhjo um gridview que chama um List<Funcionario>
Classe de Funcionário:
//Campos Privados
private int _idFuncionario;
private Setor _setor;
//Propriedades
public int IdFuncionario
{
get { return _idFuncionario; }
set { _idFuncionario = value; }
}
public Setor Setor
{
get
{
if (_setor == null)
{ _setor = new Setor(); }
return _setor;
}
set { _setor = value; }
}
ai eu chamo o metodo:
public new List<Funcionario> Select()
na qual ele monta uma lista de Funcionário, preenche o atributo Setor com os setores de cada funcionário certinho, baseado em um id que ele possui, até aqui ok... já fiz um DEBUG e da certo, mas eu coloco no Grid View um campo qualquer e digito no dataField Setor.Nome que eu quero que exiba o Nome do Setor, ele esta em memória, mas ele diz que não tem esse campo e dá erro... mas se eu quiser exibir o setor em um label por exemplo eu consigo, com Setor.Nome, porque ele recupera certinho o registro.
Obrigado e aguardo contato...
Me mande a sua query que popula o List funcionario por favor.
Aguardo
Luiz maia
22/01/2009
Vinicius Climaco
Esse é o de Funcionário, embaixo vou colocar o de Setor
public new List<Funcionario> Select(string ConnStr)
{
try
{
string strSql =
" SELECT P.id as PESSOA_ID," +
" P.identificacao as PESSOA_IDENTIFICACAO, P.catraca as PESSOA_CATRACA," +
" P.nome as PESSOA_NOME, P.modoTratamento as PESSOA_MODOTRATAMENTO," +
" P.telefone_DDD as PESSOA_TELEFONEDDD, P.telefone as PESSOA_TELEFONE," +
" P.celular_DDD as PESSOA_CELULARDDD, P.celular as PESSOA_CELULAR," +
" P.email as PESSOA_EMAIL, P.dataNascimento as PESSOA_DATANASCIMENTO," +
" P.estadocivil as PESSOA_ESTADOCIVIL, P.documentoTipo as PESSOA_DOCUMENTOTIPO," +
" P.documento as PESSOA_DOCUMENTO, P.enderecoTipo as PESSOA_ENDERECOTIPO," +
" P.enderecoNome as PESSOA_ENDERECONOME, P.enderecoNumero as PESSOA_ENDERECONUMERO," +
" P.enderecoComplemento as PESSOA_ENDERECOCOMPLEMENTO, P.enderecoBairro as PESSOA_ENDERECOBAIRRO," +
" P.enderecoCidade as PESSOA_ENDERECOCIDADE, P.enderecoUF as PESSOA_ENDERECOUF," +
" P.enderecoPais as PESSOA_ENDERECOPAIS, P.enderecoCep AS PESSOA_ENDERECOCEP," +
" P.tipoPessoa AS PESSOA_TIPOPESSOA," +
" F.id AS Funcionario_ID , F.id_pessoa AS Funcionario_IDPESSOA," +
" F.matricula AS Funcionario_MATRICULA, F.senha AS Funcionario_SENHA," +
" F.ativo AS Funcionario_ATIVO, F.aceito AS Funcionario_ACEITO," +
" F.aceitoTipo AS Funcionario_ACEITOTIPO, F.aceitoData AS Funcionario_ACEITODATA," +
" F.setor as Funcionario_SETOR," +
" F.ultimaVisita AS Funcionario_ULTIMAVISITA, F.foto AS Funcionario_FOTO" +
" FROM Pessoa P inner join Funcionario F on F.id_pessoa = P.id";
List<SqlParameter> objParameter = new List<SqlParameter>();
DataSet objDSFuncionario = objConnManager.RetornarDataSet(strSql, objParameter, ConnStr);
DataTable objTBFuncionario = objDSFuncionario.Tables[0];
List<Funcionario> objFuncionario = new List<Funcionario>();
foreach (DataRow row in objTBFuncionario.Rows)
{
Funcionario objFuncionarioReg = new Funcionario();
CarregarFuncionario(ConnStr, row, objFuncionarioReg);
objFuncionario.Add(objFuncionarioReg);
}
return objFuncionario;
}
catch (Exception)
{ throw; }
}
---- METODO CARREGA FUNCIONARIO ------
private static void CarregarFuncionario(string ConnStr, DataRow row, Funcionario objFuncionarioReg)
{
//Pessoa
objFuncionarioReg.IdPessoa = (int)row["PESSOA_ID"];
objFuncionarioReg.Identificacao = row["PESSOA_IDENTIFICACAO"].ToString();
objFuncionarioReg.Catraca = row["PESSOA_CATRACA"].ToString();
objFuncionarioReg.Nome = row["PESSOA_NOME"].ToString();
if (row["PESSOA_MODOTRATAMENTO"].ToString() != string.Empty)
{ objFuncionarioReg.ModoTratamento = (new DBModoTratamento()).SelectByID((int)row["PESSOA_MODOTRATAMENTO"], ConnStr); }
else
{ objFuncionarioReg.ModoTratamento = new ModoTratamento(); }
objFuncionarioReg.TelefoneDDD = row["PESSOA_TELEFONEDDD"].ToString();
objFuncionarioReg.Telefone = row["PESSOA_TELEFONE"].ToString();
objFuncionarioReg.CelularDDD = row["PESSOA_CELULARDDD"].ToString();
objFuncionarioReg.Celular = row["PESSOA_CELULAR"].ToString();
objFuncionarioReg.Email = row["PESSOA_EMAIL"].ToString();
if (row["PESSOA_DATANASCIMENTO"].ToString() != string.Empty)
{ objFuncionarioReg.DataNascimento = Convert.ToDateTime(row["PESSOA_DATANASCIMENTO"].ToString()); }
if (row["PESSOA_ESTADOCIVIL"].ToString() != string.Empty)
{objFuncionarioReg.EstadoCivil = (new DBEstadoCivil()).SelectByID((int)row["PESSOA_ESTADOCIVIL"], ConnStr);}
else
{objFuncionarioReg.EstadoCivil = new EstadoCivil();}
if (row["PESSOA_DOCUMENTOTIPO"].ToString() != string.Empty)
{ objFuncionarioReg.TipoDocumento = (new DBTipoDocumento()).SelectByID((int)row["PESSOA_DOCUMENTOTIPO"], ConnStr); }
else
{ objFuncionarioReg.TipoDocumento = new TipoDocumento(); }
objFuncionarioReg.Documento = row["PESSOA_DOCUMENTO"].ToString();
if (row["PESSOA_ENDERECOTIPO"].ToString() != string.Empty)
{ objFuncionarioReg.TipoLogradouro = (new DBTipoLogradouro()).SelectByID((int)row["PESSOA_ENDERECOTIPO"], ConnStr); }
else
{ objFuncionarioReg.TipoLogradouro = new TipoLogradouro(); }
objFuncionarioReg.EnderecoNome = row["PESSOA_ENDERECONOME"].ToString();
objFuncionarioReg.EnderecoNumero = row["PESSOA_ENDERECONUMERO"].ToString();
objFuncionarioReg.EnderecoComplemento = row["PESSOA_ENDERECOCOMPLEMENTO"].ToString();
objFuncionarioReg.EnderecoBairro = row["PESSOA_ENDERECOBAIRRO"].ToString();
objFuncionarioReg.EnderecoCidade = row["PESSOA_ENDERECOCIDADE"].ToString();
if (row["PESSOA_ENDERECOUF"].ToString() != string.Empty)
{ objFuncionarioReg.UF = (new DBUF()).SelectByID((int)row["PESSOA_ENDERECOUF"], ConnStr); }
else
{ objFuncionarioReg.UF = new UF(); }
objFuncionarioReg.EnderecoPais = row["PESSOA_ENDERECOPAIS"].ToString();
objFuncionarioReg.EnderecoCep = row["PESSOA_ENDERECOCEP"].ToString();
objFuncionarioReg.TipoPessoa = row["PESSOA_TIPOPESSOA"].ToString();
//Funcionario
objFuncionarioReg.IdFuncionario = (int)row["Funcionario_ID"];
objFuncionarioReg.Id_Pessoa = (int)row["Funcionario_IDPESSOA"];
objFuncionarioReg.Matricula = row["Funcionario_MATRICULA"].ToString();
objFuncionarioReg.Senha = row["Funcionario_SENHA"].ToString();
objFuncionarioReg.Ativo = row["Funcionario_ATIVO"].ToString();
objFuncionarioReg.Aceito = row["Funcionario_ACEITO"].ToString();
objFuncionarioReg.AceitoTipo = row["Funcionario_ACEITOTIPO"].ToString();
if (row["Funcionario_ACEITODATA"].ToString() != string.Empty)
{ objFuncionarioReg.AceitoData = (DateTime)row["Funcionario_ACEITODATA"]; }
if (row["Funcionario_SETOR"].ToString() != string.Empty)
{objFuncionarioReg.Setor = (new DBSetor()).SelectByID((int)row["Funcionario_SETOR"], ConnStr);}
else
{objFuncionarioReg.Setor = new Setor();}
if (row["Funcionario_ULTIMAVISITA"].ToString() != string.Empty)
{ objFuncionarioReg.UltimaVisita = (DateTime)row["Funcionario_ULTIMAVISITA"]; }
objFuncionarioReg.Foto = row["Funcionario_FOTO"].ToString();
}
----- SETOR -----
public new Setor SelectByID(int p_objSetorID, string ConnStr)
{
try
{
string strSql = "SELECT * FROM Setor where ID = @id";
// Parametro do SelectByID
List<SqlParameter> objParameter = new List<SqlParameter>();
objParameter.Add(new SqlParameter("@id", p_objSetorID));
DataTable objTBSetor = objConnManager.RetornarTabela(strSql, objParameter, "Setor", ConnStr);
Setor objSetor = new Setor();
foreach (DataRow row in objTBSetor.Rows)
{
objSetor.Id = (int)row["id"];
objSetor.Nome = row["nome"].ToString();
}
return objSetor;
}
catch (Exception)
{ throw; }
}
Ta ai qualquer dúvida estou à disposição...
Aguardo contato...
Vinicius,
Na propriedade da gridview vc não consegue ver suas propriedades da classe, já que estas não fazem parte do datasource que vc usou para popular a gridview. Portanto não dá para setar a propriedade do DataField desta forma. A propriedade setada no DataField deve ser uma propriedade do objeto datasource, as claras, seria o nome do campo retornado no datasource, veja o exemplo abaixo:
SELECT
F.NOME_FUNCIONARIO,
S.NOME_SETOR
FROM
FUNCIONARIO F INNER JOIN SETOR S ON S.COD_SETOR = F.COD_SETOR.
Assim você consegue usar NOME_SETOR no gridview.
Aguardo seu retorno.
Luiz Maia
22/01/2009
Vinicius Climaco
Mas nesse caso, vou mudar a camada de persistência tbm ?
22/01/2009
Vinicius Climaco
Mas seguinte, no atributo Setor eu ja tenho todo esse objeto preencido no caso é Setor.Id e Setor.Nome
Att,
Vinícius Climaco.
Sim, sera necessario por causa da join que tera que fazer com a tabela setor, para que a mesmo traga tabém a descrição do setor, pois no metodo funcionario vc tem apenas o ID do setor e quando vc seta o datasource do grid para este metodo e tenta colocar o nome do setor no DataField, ele não vai encontrar.
Abraços
Luiz Maia
22/01/2009
Vinicius Climaco
Fala Luiz...
Fi de uma forma que creio ser mais rápido para muitos casos onde temos diversas tabelas, senão teriamos que ficar trazendo campos a todo momento, sendo que já tenho o objeto preenchido, fiz o seguinte no GridView no evento RowDataBound, fiz o método abaixo:
protected void grid_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.FindControl("lblTeste") != null)
{ ((System.Web.UI.WebControls.Label)e.Row.FindControl("lblTeste")).Text = objListaFuncionario[e.Row.RowIndex].Setor.Nome.ToString(); }
}
Creio ser mais eficiente, pois no caso se eu tivesse N campos na tabela setor eu não preciso ficar dando inner join, ou até mesmo, se for o caso de eu chamar mais tabelas, senão poderia ter o caso de eu ter até 10 inner join em uma query ou SP.
Veja o que achou do meu raciocínio...
Abração
Vinícius Climaco.
Vinicius,
Vi outro erro no codigo:
Não é necessário o loop aqui:
foreach (DataRow row in objTBSetor.Rows)
{
objSetor.Id = (int)row["id"];
objSetor.Nome = row["nome"].ToString();
}
Já que sempre será somente um registro, passado por parâmetro.
E desta forma vc faz um loop que sempre substitui os valores na propriedade do objeto.
Voce deve usar uma List<Setor>:
Setor set = new Setor;
List<Setor> s = new List<Setor>
set.ID = ID
set.Nome = Nome
s.add(set);
Seria mais ou menos isto acima que deve fazer.
E outra coisa, ao usar o e.Row.RowIndex, como abaixo:
{ ((System.Web.UI.WebControls.Label)e.Row.FindControl("lblTeste")).Text = objListaFuncionario[e.Row.RowIndex].Setor.Nome.ToString(); }
Vc está pegando o indice do loop e não o código do funcionario que deve ser passado para que o metodo te retorne a descrição do Setor no qual o funcionario esta incluido.
Abraços
Luiz Maia
22/01/2009
Vinicius Climaco
Eu fui pelo indíce da lista porque a lista já se encontra completa, então não preciso dar um select em setor ou algo assim, quanto ao foreach esta indo na tabela setor pelo id...
E esta retornando certinho o que eu coloquei para você...
Att,
Vinícius Climaco.
Vinicius,
Vc mudou a propriedade do RowIndex para pegar o codigo do Funcionario no seu GridView? So assim funcionaria, e quanto ao foreach não tem necessidade, pois vc joga os valores na propriedade e não em um list, sendo assim do vão ficar os ultimos la.
Att
Luiz Maia
E ai Vinicius, tudo certo?
A aplicação está rodando blz?
Abraços
Luiz Maia
Opa Vinícius, tudo bom?
Como não obtivemos respostas quanto ao seu chamado, estamos concluindo o mesmo.
Qualquer dúvida não exite em nos contactar, estamos a sua disposição.
Abraços e sucesso na sua aplicação.
Att
Luiz Maia
Opa Vinícius, tudo bom?
Como não obtivemos respostas quanto ao seu chamado, estamos concluindo o mesmo.
Qualquer dúvida não exite em nos contactar, estamos a sua disposição.
Abraços e sucesso na sua aplicação.
Att
Luiz Maia