DATAGRIDVIEW C#
Bom dia, a muito custo consegui, com a ajuda do ACCIOLLY, carregar um dataGridview em um form de cadastro. Só que vou precisar fazer outros forms, também com dataGridview, e o que foi que fiz: adicionei um form e nele; datagridview; botões; labels, tudo normal. Como o funcionamento desse segundo form é semelhante ao primeiro, eu copiei o código e fui substituindo os nomes e a query que faz o select na tabela. Entretanto carrega o form com os controles, mas não carrega os dados. Tem alguma configuração à fazer a cada form inserido??Ou isso pode ser na configuração do gridview???Segue a rotina responsável pelo carregamento dos dados:
public frmSelContrato()
{
InitializeComponent();
}
private void frmSelContrato_Load(object sender, EventArgs e)
{
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; //essa linha fica melhor no método construtor na minha opinião
PreencherGRID([Ô]SELECT tbContrato.codMatricula AS Matricula, tbFunc.Nome as Nome FROM tbFunc INNER JOIN tbContrato ON tbFunc.codFunc = tbContrato.codFunc;);// dentro do parenteses vai o código SQL como parametro pro método PreencherGRID que está logo abaixo
}
private void PreencherGRID(string SQL)
{
Conexao conn = new Conexao();//instancia da classe
dataGridView1.DataSource = conn.Pesquisar(SQL);//aqui seu datagrid já é populado com o resultado do SQL passado como parametro
}
Esclarecimento: a seleção é feita de uma relação de duas tabelas: tbContrato e tbFunc para exibir no gridview o campo MATRICULA de tbContrato e o NOME do funcionário de tbFunc. Detalhe: MATRICULA não é chave primária em tbContrato mas sim codContrato. Entretanto MATRICULA também é indexado(não é permitido duplicação em tbContrato). O único campo em comum é codFunc(PK em tbFunc) com codFunc (estrangeira em tbContrato)...
Alan
public frmSelContrato()
{
InitializeComponent();
}
private void frmSelContrato_Load(object sender, EventArgs e)
{
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; //essa linha fica melhor no método construtor na minha opinião
PreencherGRID([Ô]SELECT tbContrato.codMatricula AS Matricula, tbFunc.Nome as Nome FROM tbFunc INNER JOIN tbContrato ON tbFunc.codFunc = tbContrato.codFunc;);// dentro do parenteses vai o código SQL como parametro pro método PreencherGRID que está logo abaixo
}
private void PreencherGRID(string SQL)
{
Conexao conn = new Conexao();//instancia da classe
dataGridView1.DataSource = conn.Pesquisar(SQL);//aqui seu datagrid já é populado com o resultado do SQL passado como parametro
}
Esclarecimento: a seleção é feita de uma relação de duas tabelas: tbContrato e tbFunc para exibir no gridview o campo MATRICULA de tbContrato e o NOME do funcionário de tbFunc. Detalhe: MATRICULA não é chave primária em tbContrato mas sim codContrato. Entretanto MATRICULA também é indexado(não é permitido duplicação em tbContrato). O único campo em comum é codFunc(PK em tbFunc) com codFunc (estrangeira em tbContrato)...
Alan
bom dia alan
creio q seu problema está unica e exclusivamente no sql. Deu pra perceber q vc copiou e colou o sql do access. Eu também faço isso! rsrsrsrs
Só não coloque ; no fim do sql e feche com [Ô] pra não dar erro blz!
ta assim:
é pra ficar assim
e se vc quiser colocar um filtro nesse sql é só acrescentar a clausula WHERE depois de todo esse sql
outra forma é simplesmente vc criar uma consulta no access e chamar na sua codificacao:
Valeu
creio q seu problema está unica e exclusivamente no sql. Deu pra perceber q vc copiou e colou o sql do access. Eu também faço isso! rsrsrsrs
Só não coloque ; no fim do sql e feche com [Ô] pra não dar erro blz!
ta assim:
PreencherGRID([Ô]SELECT tbContrato.codMatricula AS Matricula, tbFunc.Nome as Nome FROM tbFunc INNER JOIN tbContrato ON tbFunc.codFunc = tbContrato.codFunc;);
é pra ficar assim
PreencherGRID([Ô]SELECT tbContrato.codMatricula AS Matricula, tbFunc.Nome as Nome FROM tbFunc INNER JOIN tbContrato ON tbFunc.codFunc = tbContrato.codFunc[Ô]);
e se vc quiser colocar um filtro nesse sql é só acrescentar a clausula WHERE depois de todo esse sql
outra forma é simplesmente vc criar uma consulta no access e chamar na sua codificacao:
PreencerGRID([Ô]SELECT * FROM sua_consulta[Ô])
Valeu
Olá, caro amigo ACCIOLLY, estou aqui na pedreira novamente.Só a alteração da query sql não resolveu ainda. Tentei também uma consulta do ACCESS e também não carregou os dados. Será que não tem alguma configuração a mais no gridview???
Aproveitando o encejo: como se quebra uma linha ao escrever o código em c#,ex: as vezes ao digitar uma query muito extensa que envolve muitas relações de tabelas a escrita vai muito para direita que sai do campo de visão da tela. No vb6 era só colocar & _ no fim da linha e passar para próxima e no c#?
Aproveitando o encejo: como se quebra uma linha ao escrever o código em c#,ex: as vezes ao digitar uma query muito extensa que envolve muitas relações de tabelas a escrita vai muito para direita que sai do campo de visão da tela. No vb6 era só colocar & _ no fim da linha e passar para próxima e no c#?
Ola alan
Clique com o botao direito em cima da grid e va em edit collums. Se existem campos inseridos manualmente lá, veja se na propriedade DataPropertyName voce colocou o campo da tabela do seu banco correspondente a coluna q está inserida no seu grid.
Mesmo q lá esteja errado, era pra popular a grid mesmo assim, ou seja, seriam adicionados outros campos e aqueles inseridos manualmente ficariam sem nada. só um monte de linhas vazias. Agora se não retorna linha alguma o problema esteja na sql mesmo. Quando vc criou a consulta no access conseguiu visualizar alguma coisa lá no access?
quanto as quebras de linhas, é só fechar aspas duplas depois + de um enter e coloque aspas duplas denovo tipo assim
Isso é só concatenação, diferente do vb que tem q usar o underline
qualquer coisa me passa seu proj denovo
te mais
Clique com o botao direito em cima da grid e va em edit collums. Se existem campos inseridos manualmente lá, veja se na propriedade DataPropertyName voce colocou o campo da tabela do seu banco correspondente a coluna q está inserida no seu grid.
Mesmo q lá esteja errado, era pra popular a grid mesmo assim, ou seja, seriam adicionados outros campos e aqueles inseridos manualmente ficariam sem nada. só um monte de linhas vazias. Agora se não retorna linha alguma o problema esteja na sql mesmo. Quando vc criou a consulta no access conseguiu visualizar alguma coisa lá no access?
quanto as quebras de linhas, é só fechar aspas duplas depois + de um enter e coloque aspas duplas denovo tipo assim
PreencherGRID([Ô]SELECT tbContrato.codMatricula [Ô] +
[Ô]AS Matricula, tbFunc.Nome as Nome [Ô] +
[Ô]FROM tbFunc INNER JOIN tbContrato [Ô]+
[Ô]ON tbFunc.codFunc = tbContrato.codFunc[Ô]);
Isso é só concatenação, diferente do vb que tem q usar o underline
qualquer coisa me passa seu proj denovo
te mais
ACCIOLLY valeu a dica da quebra de linha. Quando ao gridview adicionei manualmente duas colunas: Matricula e Nome conforme a sql : tbContrato.codMatricula AS Matricula, tbFunc.Nome as Nome. E as propriedades dessas colunas estão nomeadas: name, headertext e dataPropertyName com os mesmos nomes. Vou postar o projeto, senão não vou sair do chão com essa....
Ola alan
Olha, provavelmente aconteceu algum problema no xml do seu projeto. Mas eu exclui esse form e fiz outro e a codificação funcionou perfeitamente. Estou mandando pra vc termina-la pois refiz apenas do evento load, mas já dá pra você ver q funciona a codificacao.
Pra que não aconteça novamente é bom tomar cuidado ao copiar e colar a codificação de outros forms. O ideal é fazer tudo no muque! rsrsrs. é assim agente pega a manha.
quando for copiar e colar, faça isso de método pra método e não da classe inteira. Não que vc faça isso, é só pra te alertar. Blz! pois como vc tá começando seu projeto, é interessante entende-lo com a palma da sua mão, porque quando ele estiver com proporções gigantescas ele pode sair do seu controle!
Outra coisa que quero te falar é que vc não precisa mais inserir as colunas manualmente no seu grid, apenas popule elas com o sql e mude a propriedade AutoSizeColumnsMode da sua grid para DisplayedCells, assim o tamanho da sua coluna vai se encaixar com o tamanho da maior célula.
OBS: Se achou o estilo da grid mais arrojado, só olhe para as propriedades que mudei da grid, elas vão estar em negrito.
Té mais...
Olha, provavelmente aconteceu algum problema no xml do seu projeto. Mas eu exclui esse form e fiz outro e a codificação funcionou perfeitamente. Estou mandando pra vc termina-la pois refiz apenas do evento load, mas já dá pra você ver q funciona a codificacao.
Pra que não aconteça novamente é bom tomar cuidado ao copiar e colar a codificação de outros forms. O ideal é fazer tudo no muque! rsrsrs. é assim agente pega a manha.
quando for copiar e colar, faça isso de método pra método e não da classe inteira. Não que vc faça isso, é só pra te alertar. Blz! pois como vc tá começando seu projeto, é interessante entende-lo com a palma da sua mão, porque quando ele estiver com proporções gigantescas ele pode sair do seu controle!
Outra coisa que quero te falar é que vc não precisa mais inserir as colunas manualmente no seu grid, apenas popule elas com o sql e mude a propriedade AutoSizeColumnsMode da sua grid para DisplayedCells, assim o tamanho da sua coluna vai se encaixar com o tamanho da maior célula.
OBS: Se achou o estilo da grid mais arrojado, só olhe para as propriedades que mudei da grid, elas vão estar em negrito.
Té mais...
ACCIOLLY, fechou todas, funcionaram também os outros comandos que faltavam. Pelo que pude perceber ao inserir um form ou controle, o sistema faz um tipo de registro interno(xml) que é responsavel por nome, tamanho, fonte,etc. Se for feita apenas cópias não acontece esse registro e os códigos não executam direito.De agora em diante vou inserir passo a passo os controles, forms e eventos no sistema. Valeu...vou encerrar por aqui!!!!
Tópico encerrado , respostas não são mais permitidas