DataGridView com colunas de tabelas diferentes

21/10/2014

0

Olá a todos.
Tenho a classe Cliente

public class Cliente {
public int IdCliente { get; set; }
public string Nome { get; set; }
public CodPostal Cod { get; set; }
}

public clasee CodPostal {
public string IdCodPostal { get; set; }
public string Localidade { get; set; }
}


Depois tenho um form com uma datagridview que quero que apareça Nome | Codigo-Postal | Localidade

Para tal tenho uma procedure que devolve esses campos.


DataTable table = resultado da procedure;
ClienteCollection colClientes = new ClienteCollection();

foreach(DataRow linha in table.Rows) {
Cliente cliente = new Cliente();
cliente.Nome = tabela["Nome"].ToString();

CodPostal codP = new CodPostal();
codP.IdCodPostal = tabela["IdCodPostal"].ToString();
codPostal.Localidade = tabela["Localidade"].ToString();

cliente.Cod = codP;

colClientes.Add(cliente);
}


O erro é que no dataGridView não aparece o campo referente a cliente.Cod.IdCodPostal nem cliente.Cod.Localidade
Guilherme

Guilherme

Responder

Posts

21/10/2014

Joel Rodrigues

Neste caso você precisará usar um tipo dinâmico:
List<object> clientes = new List<object>();

foreach(DataRow linha in table.Rows) {
	var cli= new {
		Nome = linha["Nome"].ToString(),
		CodigoPostal = linha["IdCodPostal"].ToString(),
		Localidade = linha["Localidade"].ToString()
	};
	clientes.Add(cli);
}

dataGrid.DataSource = clientes;
Responder

21/10/2014

Guilherme

Mas eu tenho o projeto em camadas.
O código que voçê indicou está na camada de negócios e o form na camada de apresentação.

no form eu tinha um método que fazia

ClienteNegocio cliNegocio = new ClienteNegocio();
ClienteCollection colClientes = clienteNegocio.getDados(textboxPesquisa.Text);

dataGrid.DataSource = null;
dataGrid.DataSource = colClientes;
dataGrid.Update();
dataGrid.Refresh();


Mas agora se meu método getDados da classe ClienteNegocio não devolve ClienteCollection.
Pode devolver List<object>? é que dá erro dessa maneira
Responder

22/10/2014

Joel Rodrigues

Qual erro?
Responder

22/10/2014

Guilherme

Desculpe, não é erro.
Apenas não aparece a Localidade.
Responder

22/10/2014

Guilherme

Já rola. Foi erro meu ao editar as colunas do datagrid.
Obrigado pela ajuda
Responder

27/10/2014

Guilherme

Ainda dentro deste problema.
No dataGrid está tudo correto, mas como faço para ao clicar numa linha me apareça um form com essa informação?
Depois de fazer

foreach (DataRow linha in tabela.Rows)
{
var medico = new
{
Nome = (linha["Nome"]).ToString(),
Morada = linha["Morada"].ToString(),
IdCodPostal = (linha["IdCodPostal"]).ToString(),
Localidade = linha["Localidade"].ToString()
};

medicos.Add(medico);
}


Tenho o seguinte método para quando fizer double click numa linha

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) {
object objetoSelecionado = (dataGridView1.SelectedRows[0].DataBoundItem as object);
NovoForm novoF = new NovoForm();
novoF.carregaCampos(objetoSelecionado);
novoF.Show();
}


Depois, no NovoForm preciso ter um método que preencha a tela com dados que vem do objetoSelecionado.
Mas tou com problemas na parte de desenvolvimento do método carregaCampos pois n compreendo bem a usabilidade do tipo object.

Obrigado
Responder

28/10/2014

Joel Rodrigues

O problema de lidar com tipos dinâmicos é o fato de eles serem dinâmicos =)
Ou seja, não tem como fazer cast e pegar suas propriedades. Para conseguir isso, você teria que criar uma classe com os campos que deseja e ao invés de "as Object", fazer "as Classe".
Responder

31/10/2014

Guilherme

Devo fazer então uma classe com os atributos Nome, Morada, IdCodPostal, Localidade certo?
Responder

01/11/2014

Joel Rodrigues

Devo fazer então uma classe com os atributos Nome, Morada, IdCodPostal, Localidade certo?
Exatamente. Dessa forma você terá todas as propriedades acessíveis.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar