DATAGRIDVIEW C#

ALANTB 17/09/2015 09:55:31
#451491
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
ACCIOLLY 17/09/2015 10:25:50
#451494
Resposta escolhida
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:
  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
ALANTB 17/09/2015 10:57:45
#451499
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#?
ACCIOLLY 17/09/2015 11:26:27
#451500
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

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
ALANTB 17/09/2015 11:44:28
#451504
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....
ACCIOLLY 17/09/2015 15:32:06
#451513
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...
ALANTB 17/09/2015 22:54:41
#451530
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