Mostrar a descrição do perfil na coluna do GridView e não o codigo do perfil

.NET

16/09/2013

Olá, tenho um windowsform de cadastro de funcionários, quero que no gridView na coluna perfil mostre o nome do perfil e não o código do perfil
Esta informação vem da tabela “Perfil” no Banco de Dados que cadastro por outro windowsform “Cadastro dePerfil”, como fazer isto sem ser com combobox ?
Abaixo a imagem para facilitar o entendimento.

[url]http://uploaddeimagens.com.br/imagens/coluna_perfil_usuario-png[/url]
Jair Souza

Jair Souza

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

16/09/2013

No select, já traga a descrição do perfil utilizando um inner join. Por exemplo:
SELECT U.NOME, U.LOGIN, P.DESCRICAO
FROM USUARIOS U
INNER JOIN PERFIL P ON U.COD_PERFIL = P.CODIGO
GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

Como o meu nome já diz sou iniciante...você pode detalhar melhor como montar este código e onde o coloco ?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/09/2013

Bom, você vai ter de pesquisar sobre INNER JOIN.
E sobre onde colocar o select, é no mesmo canto onde está hoje a sua instrução de select que traz o código do perfil.
Se tiver dificuldade, descreva o processo que está usando para exibir os dados no grid.
GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

Para exibir os dados criei algumas tabelas no Access e arrastei para dentro do projeto no VB 2010, cfe. imagem abaixo.

[url]http://uploaddeimagens.com.br/imagens/bd-png--3[/url]
GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

...seria por este caminho mostrado na imagem abaixo, se for...como devo montar o select ?

[url]http://uploaddeimagens.com.br/imagens/query_select-png[/url]
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/09/2013

Exatamente aí. Creio que ficaria assim:
SELECT F.IDFuncionario, F.Nome, F.Login, F.Senha, P.Nome, F.Situacao,
FROM Funcionario F
INNER JOIN Perfil P ON F.Perfil = P.IDPerfil
WHERE (F.Nome LIKE '%' + ? + '%')

GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

Certo, mas estas linhas de código em que local da estrutura do código eu coloco é dentro de uma "private void..." ?
Pois a que mostrei na imagem é uma Query que depois de criada é chamada no código por FillBy...
To enrolado, não é fácil ser iniciante...
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/09/2013

Como eu disse, é exatamente naquela tela que você vai usar esse código. Lá onde tem o select original, você vai substituir por esse que eu postei.
Mas desde já, indico que estude INNER JOIN para entender o que está sendo feito.
GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

Certo, depois de criar o select onde e como devo chamá-lo para que automaticamente preencha a coluna perfil com a descrição do perfil no GridView ?

[url]http://uploaddeimagens.com.br/imagens/coluna_perfil_usuario-png[/url]
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/09/2013

Vamos lá. Você já tem esse grid aí, certo? Você montou ele em algum momento e já exibe os dados nele normalmente.
O que muda agora é somente o select que você vai usar. Você vai apenas repetir o processo que já usa para exibir os dados nesse grid.
GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

Olá, pois bem fiz conforme sua orientação, mas ainda não funcionou veja comentários e imagens :

*Na Query, parece estar certo pois já mostra o nome e não mais o id do perfil :

[url]http://uploaddeimagens.com.br/imagens/imagem_query-png[/url]

*Mas ao abrir o form e ir até a page2 que é onde está o grid mostra o id...

[url]http://uploaddeimagens.com.br/imagens/grid-png[/url]

*E ao digitar no textbox para pesquisar fica tudo em branco na coluna perfil...

[url]http://uploaddeimagens.com.br/imagens/textbox_de_pesquisa-png[/url]

...e agora parece faltar pouco...mas não sei o que.
GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

...mais uma coisa
*E ao digitar no textbox para pesquisar fica tudo em branco na coluna perfil...para esta pesquisa funcionar pelo textbox no evento textboxTextChanged é chamado a query This.....FillByNome..., que é a mesma query que já tínhamos e que alteramos.

Abaixo as imagens dos dois forms, cadastro de funcionarios e cadastro de perfil.

[url]http://uploaddeimagens.com.br/imagens/forms-png--2[/url]

Aguardo ajuda e já agradeço pela paciência.



GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/09/2013

Você precisa redefinir as colunas do seu grid. Em algum momento você deve ter editado, mudado o caption, etc. Certo? Agora precisa refazer o processo, mas alterando a coluna Perfil para pegar esse novo campo.
GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

Eu não saberia refazê-lo...se eu deletá-lo do form e arrastar um novo será que resolve ?
GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

...Como assim alterar a coluna perfil para pegar o novo campo, alterar o que e onde ?

*Não esqueça sou Iniciante com I maiúsculo.
GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

...Como assim alterar a coluna perfil para pegar o novo campo, alterar o que e onde ?

*Não esqueça sou Iniciante com I maiúsculo.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/09/2013

Clique com a direita no grid. Depois clique em "Edit columns".
Selecione a coluna onde está o Id e na propriedade DataPropertyNAme, selecione essa nova coluna.
GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

Fiz como disseste, mas no DataPropertyName não tem a opção que aparece no teste da Query, então criei um Select novo e no Execute Query fica perfeito, mas no Gridi NADA...
Olhei todas opções nas propriedades, as Collumns e nada de Luz....veja as imagens abaixo :

[url]http://uploaddeimagens.com.br/imagens/datapropertyname-png[/url]

[url]http://uploaddeimagens.com.br/imagens/novo_select-png[/url]

Agradeço pela paciência.
GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

Bom dia, primeiro gostaria de agradecer, pois finalmente através das dicas consegui, mas agora está gerando um erro ao salvar sempre que há alteração de perfil no combobox da page1 "Cadastro", veja as imagens abaixo, se puderem me ajudar em mais esta etapa...

[url]http://uploaddeimagens.com.br/imagens/erro_ao_salvar-png[/url]

...já ia esquecendo tambem está aparecendo esta mensagem :

[url]http://uploaddeimagens.com.br/imagens/mensagem_warning-png[/url]
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/09/2013

Sobre a primeira mensagem, creio que junto do select também são geradas outras instruções SQL de delete e updat, certo? Verifique como elas estão.
GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

...não sei certo onde ficariam estas instruções, se for junto do select que criei, não tem nada além do select desejado, veja as imagens :

[url]http://uploaddeimagens.com.br/imagens/select_erro_ao_salvar-png[/url]
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/09/2013

Cara, é que já faz um tempo que eu não uso esse método, mas veja se na tela onde você configura o Table Adapter não tem nunhum lugar onde ficam as instruções de Insert, Update e Delete. Se não achar, selecione o Table Adapter verifique a janela de propriedades.
GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

Bom dia, acredito que não foi criado, veja na imagem as opções que selecionei ao criar este SELECT :

[url]http://uploaddeimagens.com.br/imagens/select_criado-png[/url]
GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

Bom dia, acredito que não foi criado, veja na imagem as opções que selecionei ao criar este SELECT :

[url]http://uploaddeimagens.com.br/imagens/select_criado-png[/url]


Olá pessoal, alguém pode me dar um socorro aqui... ?
Não posso desistir parece faltar tão pouco...mas no momento estou sem rumo.
GOSTEI 0
Matheus Caldas

Matheus Caldas

16/09/2013

Bom dia, acredito que não foi criado, veja na imagem as opções que selecionei ao criar este SELECT :

[url]http://uploaddeimagens.com.br/imagens/select_criado-png[/url]


Olá pessoal, alguém pode me dar um socorro aqui... ?
Não posso desistir parece faltar tão pouco...mas no momento estou sem rumo.


Bom dia Iniciante,

Tem como vc postar um trecho do código onde vc faz a edição do funcionário?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/09/2013

Descreva cada passo que você deu para criar esse TableAdapter para que eu possa reproduzir aqui.
GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

No form tem o bindingnavigator nativo, eu acrescentei os botões alterar e cancelar e uso o salvar e adicionar nativo :

Botão alterar, habilita os textbox e o combobox para edição.
Botão cancelar, desabilita os textbox e o combobox para edição sem salvar.

Estas imagens abaixo mostram os passos que segui para criar, depois no grid editei o DataPropertyName
da column Perfil para “Descricao”, editei as propriedades no combobox e o erro que está dando:

Form :
[url]http://uploaddeimagens.com.br/imagens/form-png[/url]

Select criado :
[url]http://uploaddeimagens.com.br/imagens/select_criado-png--2[/url]

Alteração DataPropertyName da column "Perfil" :
[url]http://uploaddeimagens.com.br/imagens/alteracao_datapropertyname-png[/url]

Property Combo :
[url]http://uploaddeimagens.com.br/imagens/combo_config-png[/url]

Depois que criei este Select acontece os seguintes problemas :

*Se altero o tipo de perfil num cadastro já existente, ou seja altero a informação no combobox dá o erro
Column ‘IDFuncionario’ is constrained to be unique. Value ‘1’ is already present.
Coluna 'IDFuncionario' é restrito a ser único. Valor '1 'já está presente.

*Se salvo um cadastro novo preenchendo todos os campos e selecionando o tipo de perfil no combobox,
Ele salva no banco sem a informação de perfil e tambem não mostra o novo cadastro no form, se cadastrar sem selecionar perfil no combobox salva e carrega no form normalmente, mas indo no grid não mostra nenhum perfil na coluna perfil.

[url]http://uploaddeimagens.com.br/imagens/erro_ao_salvar-png--2[/url]

E este é código do botão salvar, na atualização do form usando o Fill original ou o Fill do select criado dá erros diferentes, mas com nenhum dá certo.
BtnSalvar_Click
            
            try
            {
                if (senhaTextBox.Text == ConfSenhatextbox.Text)
                {
                    this.Validate();
                    this.funcionarioBindingSource.EndEdit();
                    this.tableAdapterManager.UpdateAll(this.bDBiblioteca2DataSet);
                    MessageBox.Show("Registro Salvo com Sucesso !", "Salvar", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    
	         //Atualiza Form – Original.
		   this.funcionarioTableAdapter.Fill(this.bDBiblioteca2DataSet.Funcionario);
			OU			
		  //Atualiza Form – Select Criado.
                this.funcionarioTableAdapter.FillDescrPerfil(this.bDBiblioteca2DataSet.Funcionario);
                    
                    DesabilitaCampos();
                    this.tabControl1.TabPages.Add(this.tabPage2);
                }
                else
                {
                    MessageBox.Show("Senhas não são Iguais !", "Salvar", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    ConfSenhatextbox.ForeColor = Color.Red;
                    ConfSenhatextbox.Focus();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("" + ex.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);

                //Atualiza Form – Original.
		   this.funcionarioTableAdapter.Fill(this.bDBiblioteca2DataSet.Funcionario);
			OU			
		  //Atualiza Form – Select Criado.
                this.funcionarioTableAdapter.FillDescrPerfil(this.bDBiblioteca2DataSet.Funcionario);

                this.tabControl1.TabPages.Add(this.tabPage2);
                DesabilitaCampos();
                
            } 
       }


Se precisar mais informações é só dizer.

Desde já agradeço.

GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

Finalmente encontrei o erro, os parâmetros do Data Bound Items do ComboBox estavam errados, veja na imagem abaixo:

[url]http://uploaddeimagens.com.br/imagens/parametros_data_bound_items_-_combobox-png--2[/url]

...porém quando faço pesquisa por nome através do textbox no page2 onde fica o gridview o combobox do page1 fica em branco, o que ainda está errado ?

Para lembrar :

*Tem um SELECT para preencher com a descricçao do perfil e não com o ID :
SELECT        F.IDFuncionario, F.Nome, F.Login, F.Senha, F.Perfil, P.Descricao, F.Situacao
FROM            (Funcionario F INNER JOIN
                         Perfil P ON F.Perfil = P.IDPerfil)


**Para a pesquisa no textbox na page2 tem outro SELECT :
SELECT        F.IDFuncionario, F.Nome, F.Login, F.Senha, P.Descricao, F.Situacao
FROM            (Funcionario F INNER JOIN
                         Perfil P ON F.Perfil = P.IDPerfil)
WHERE        (F.Nome LIKE '%' + ? + '%')
GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

Descreva cada passo que você deu para criar esse TableAdapter para que eu possa reproduzir aqui.


Finalmente encontrei o erro, os parâmetros do Data Bound Items do ComboBox estavam errados, veja na imagem abaixo:

[url]http://uploaddeimagens.com.br/imagens/parametros_data_bound_items_-_combobox-png--2[/url]

...porém quando faço pesquisa por nome através do textbox no page2 onde fica o gridview o combobox do page1 fica em branco, o que ainda está errado ?

Para lembrar :

*Tem um SELECT para preencher com a descricçao do perfil e não com o ID :
SELECT        F.IDFuncionario, F.Nome, F.Login, F.Senha, F.Perfil, P.Descricao, F.Situacao
FROM            (Funcionario F INNER JOIN
                         Perfil P ON F.Perfil = P.IDPerfil) 



**Para a pesquisa no textbox na page2 tem outro SELECT :
SELECT        F.IDFuncionario, F.Nome, F.Login, F.Senha, P.Descricao, F.Situacao
FROM            (Funcionario F INNER JOIN
                         Perfil P ON F.Perfil = P.IDPerfil)
WHERE        (F.Nome LIKE '%' + ? + '%')
GOSTEI 0
José

José

16/09/2013

Obrigado por compartilhar conosco que encontrou o erro e aonde ele se encontrava.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/09/2013

Creio que no Selected Value você deve selecionar o IDPerfil na tabela de funcionários e não a descrição (Perfil).
No caso, você tem que trazer as duas colunas (código e descrição no select.
GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

Mas na tabela “Funcionario” não temos “IDPerfil”..., e se realmente é isto, devo inserir no BD ACCESS e como atualizar esta alteração no projeto do visual studio como faço para inserir “IDPerfil” na tabela “Funcionario” ?

Seria como na imagem abaixo, incluo o IdPerfil na tabela funcionario altero o relacionamento e elimino o campo Perfil ? no ACCESS barbada, mas no projeto como faço ?

É o meu primeiro projeto...hehehe

[url]http://uploaddeimagens.com.br/imagens/idperfil-png[/url]

Mais uma vez, obrigado pela paciência.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/09/2013

Ma você tinha o IDPerfil e queria mostrar a Descrição. Não era essa a dúvida inicial?
Então, ao invés de tirar a IDPerfil do select, mantenha ela e traga também a Descrição.
GOSTEI 0
Jair Souza

Jair Souza

16/09/2013

Finalmente resolvido este último erro, é que não estava chamando no SELECT o campo "F.Perfil", acrescentei nos dois SELECT e está perfeito,
tanto no combobox perfil como na coluna perfil do grid.
Ficaram assim os dois, o primeiro responsável por mostrar a Descrição e não o ID no Campo Perfil e o segundo responsável pela pesquisa através do textbox mostrando o resultado no grid :

SELECT        F.IDFuncionario, F.Nome, F.Login, F.Senha, F.Perfil, P.Descricao, F.Situacao
FROM            Funcionario F 
INNER JOIN  Perfil P ON F.Perfil = P.IDPerfil

SELECT F.IDFuncionario, F.Nome, F.Login, F.Senha, F.Perfil, P.Descricao, F.Situacao
FROM Funcionario F
INNER JOIN Perfil P ON F.Perfil = P.IDPerfil
WHERE (F.Nome LIKE  ‘%’ +  ?  + ‘%’)


***Resolvido 100%, Muito Obrigado !
GOSTEI 0
POSTAR