DataGridView com colunas de tabelas diferentes
21/10/2014
0
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
Posts
21/10/2014
Joel Rodrigues
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;
21/10/2014
Guilherme
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
22/10/2014
Guilherme
Obrigado pela ajuda
27/10/2014
Guilherme
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
28/10/2014
Joel Rodrigues
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".
31/10/2014
Guilherme
01/11/2014
Joel Rodrigues
Clique aqui para fazer login e interagir na Comunidade :)