Fórum Orientação no processo de Sincronização de DETAILSVIEW com GRIDVIEW #490

16/11/2008

0

Bom Dia

Solicito ajuda na questão de sincronizar um DetailsViews com GRIDVIEW, de modo que quando o usuário escolher um determinado registro do GRIDVIEW via command (Select) eu faça a atualizão do Details VIews.   Inicialmente coloquei o DetailsView ligado a um SQLDataSource (Cliente), em DelfaultMode ReadOnly, acrescentado com os botões Edit, New e Delete.   Inicialmente coloco o GRIDVIEW ligado ao mesmo DataSource (SqlCliente) para que após digitar no Detaviews seja atualizado após um gvClientes.Databind();   Para a sincroização, criei um 2o. SqlDatasource para o DetailsViews(ClienteUnico) , fiz este Sql, via o WIzard, e coloquei a clausula Where recebendo o valor pelo COntrolID gvClientes,  de modo que quando o usuário acessar o Select do GridView, esta 2a. select receba este o ID do GRIDVIEW e faça a leitura do registro para que ele possa ser EDITADO ou EXCLUIDO.   Não consegui foi fazer com que após o Select eu "Mude" o SqlDataSource.   Andei vendo as suas VAs - wm003-guinther.avi, wm004-guinther.avi, wm005-guinther.avi. Tentei usar o evento RowCommand, mas não consegui identificar o CommandName do Select. Tentei usar o FormsVews ao invés do DetaislViews, mas esbarrei no mesmo problema. Inclusive não vi diferença entre eles.   Desde já agradeço a orientação!   Atte Sérgio

PS - Criei um outro post equivocamandamente na parte de C# mas não consegui exclui-lo. PS - Não consegui enviar um arquivo via o botão de UpLOAD!  
Sergio Santos

Sergio Santos

Responder

Posts

17/11/2008

[devmedia .net]

Olá Sérgio, você já viu este artigo ?? É um passo a passo de como utilizar o GridView com o DetailsView, Veja se te atende e por favor me dê um retorno.   Abra o Visual Web Developer, crie um novo Web Site através do menu (File/New Web Site) e preencha as informações conforme indica a figura 01, escolhendo um nome apropriado para a pasta onde será criado o projeto (neste caso mantive o padrão sugerido, WebSite1).
Figura 01 – Criação do site Como padrão, o VS cria pra você o projeto e alguns arquivos como o Default.aspx.
Figura 02 – Página Default.aspx do projeto Nosso próximo passo será adicionar o arquivo Access em nosso projeto. Para isso acesse o Solution Explorer. Clique com o botão direito do mouse em cima da pasta App_Data e selecione Add Existing Item.  
Figura 03 – Adicionar o Banco de Dados Você pode utilizar seu banco de dados no exemplo e não precisa utilizar o que foi citado. Não precisa nem adicioná-lo ao projeto como é feito ok !? Apenas faça a conexão direta a ele e boa !   Selecione o arquivo Northwind.mdb (geralmente localizado na pasta C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb). e clique em Add. Realizando estes procedimentos o banco de dados fará parte do nosso projeto como mostra a próxima Figura 04. Note que o arquivo é copiado pelo VWD para a pasta AppData.  
Figura 04 – Banco já adicionado Dê um clique duplo no arquivo Northiwnd.mdb que se encontra no Solution Explorer, isso fará com que o Database Explorer carregue todas as tabelas do arquivo.
Figura 05 – Database Explorer Arraste a tabela Employees sobre o arquivo Default.aspx (página de nosso projeto) e perceba que automaticamente o GridView é preenchido com as colunas da tabela selecionada. Perceba que a conexão também foi criada (AccessDataSource), como mostra a Figura 06.
Figura 06 – AccessDataSource Neste exemplo não vamos precisar de todas as colunas da tabela Employees. Para modificar, precisamos configurar o AccessDataSource. Clique em seu smart tag, a seta no canto direito superior do controle, para abrir o AccessDataSource Tasks (Figura 07).
Figura 07 – AccessDataSource Tasks Clique em Configure Data Source para abrir o assistente. Figura 08.
Figura 08 – Assistente de configuração de Banco de Dados Perceba que a primeira tela do assistente mostra o caminho onde está nosso arquivo Northwind.mdb. Clique em Next para termos acesso a todas as tabelas do banco. Clique em Specify columns from a table or view e, em Name, selecione a tabela Employees.
Figura 09 – Tabela do banco de dados Selecione somente as colunas EmployeeID, LastName, FirtName, Title e HireDate como na Figura 09. Em seguida, clique em Advanced. Em Advanced SQL Generation Options, marque Generate INSERT, UPDATE, and DELETE statements como mostra a Figura 10, o que faz com que os comandos SQL sejam criados pelo assistente. Clique em OK e em Next.
Figura 10 – Advanced SQL Generation Agora iremos testar a Query clicando em Test Query. Podemos ver o resultado do comando Select como mostrado na próxima figura. Clique em Finish e em seguida você será questionado se deseja atualizar o GridView. Clique em sim para concluir.
Figura 11 – Test Query Nosso próximo passo será formatar o GridView, habilitar a paginação, ordenação e seleção. Formate com um esquema que lhe agrade, clicando em Auto Format. Agora habilite Enable Paging, Enable Sorting e Enable Selection (Figura 12).
Figura 12 – Configuração do GridView Neste momento, podemos fazer o primeiro teste em nosso aplicativo. Pressione Ctrl + F5 para rodar a aplicação e em seguida teremos o browser exibindo o GridView com os dados da tabela Employee (Figura 13).
Figura 13 – Tabela sendo apresentada no Explorer Caso deseje, você pode alterar o cabeçalho das colunas, formatar a coluna Data e modificar outras opções através da tela Fields. Para isso acione a Smart Tag e clique em Edit Columns. Na Figura 14, por exemplo, alterei o cabeçalho da coluna HireDate para Hire e formatei para exibir a data no formato DD/MM/YYYY.
Figura 14 – Configuração da Data Complementando nosso projeto, vamos incluir o componente DetailsView. Desta forma, ao selecionarmos uma linha no GridView teremos a possibilidade de alterar os dados do registro. Pressione Ctrl + Alt + X para acessar o Toolbox e arraste o componente DetailsView (Figura 15) debaixo do GridView. Figura 16.
Figura 15 – Toolbox
Figura 16 - DetailsView Agora vamos criar um novo Data Source, no DetailsView Tasks clique em New data source. Selecione Access Database e clique em OK. Figura 17.
Figura 17 – Access Database Com isso, na próxima tela teremos que localizar o arquivo Northwind.mdb em Choose a Database. Clique em Browse, em App_Data selecione o banco e clique em Ok.
Figura 18 – Selecionar o Banco Northwind.mdb Como na primeira conexão, vamos utilizar a tabela Employee. Marque novamente as colunas como na Figura 09. Novamente clique em Advanced e marque Generate INSERT, UPDATE, and DELETE statements como na Figura 10 e clique em OK. Até agora nossa nova conexão não tem nada de diferente da primeira, mas para que possamos exibir os dados da linha selecionada no GridView precisamos configurar a clausula WHERE, de um clique no botão WHERE, teremos acesso a tela Add WHERE Clause, em Column selecione a chave primária da tabela Employee que (EmployeeID), Operator (=) e em Source (Control), em Control ID: (GridView1), clique em Add, (Figura 19) em seguida ok.
Figura 19 – Configurar o que será mostrado Clique em Test Query e verá a janela Parameter Values Editor (Figura 20). No campo Value digite o número 2 e clique em Ok.
Figura 20 – Digitando o valor O Assistente mostra o resultado em um grid (Figura 21). Clique em Finish.
Figura 21 – Mostrando o resultado do valor pedido Para formatar o DetailsView, clique em Format no DetailsView Tasks e escolha um esquema que lhe agrade.  Habilite também a opção Editing, com isso poderemos alterar o registro (Figura 22).
Figura 22 – Configurando o DetailsView Pressione CTRL+F5 para rodar a aplicação. Selecione um registro e perceba que os dados serão exibidos no DetailsView como na Figura 23. Caso necessite, você pode clicar em Edit e alterar o registro. Outra opção que você também pode selecionar é habilitar as opções de Inserir (Enable Inserting) e Excluir (Enable Deleting).
Figura 23 – Projeto concluído com a edição do registro selecionado Espero ter ajudado, Aguardo retorno Abraços   Carlos Júnior
Responder

Gostei + 0

17/11/2008

Sergio Santos

Carlos   Bom Dia   Já tinha visto este post, mas não me atendeu porque na primeira vez que roda a aplicação o DetaislViews não aparece pelo fato de não ter um ID_GRIDVIEW selecionado.   Se houver um maneira de resolver isto esta solução me atenderá. Já fiz até um SqlDataSourceUnico para associar a DetailsView, mas não consegui fazer com que na primeira vez ele venha com algum valor ou em Modo de Inclusão por exemplo.   Uma outra coisa que tentei sem sucesso foi "REPROGRMAR" o botão select, de modo que eu pudesse pegar o ID da linha e repassar para o ID do DetailsView.   bom, fico no aguardo de sua ajuda!   Abs Sérgio              
Responder

Gostei + 0

17/11/2008

Sergio Santos

Carlos   Existe alguma maneira de fazer com como Detailsviews na primeira vez vem em modo de Inclusão e exiba o GridView?   Um outro problema que estou encontrando é a questão de não conseguir fazer um refres do GRIDVIEW após uma Inclusão, Exclusao ou Alteração.   O que eu teria que fazer para fazer um GridView.DataBind após os eventos do DetailsView?   Abs Sérgio
Responder

Gostei + 0

17/11/2008

[devmedia .net]

Olá Sérgio, bom eu achei que tinha entendido a fundo seu problema, mas vejo que não..   vamos por passos:   Qual o seu problema com o GridView e DatailsView ?   Pois a ligação entre eles eu vi que você já fez.. e é bem simples isso.. No exemplo que eu mandei tem tudo, o insert, update e delete atualizando o Grid...   Não entendi o seu problema então !   Aguardo   Carlos Jr
Responder

Gostei + 0

17/11/2008

Sergio Santos

Carlos   Vamos lá..   Coloquei no form 1 DetaisViews ligado a um datasoource SqlClienteUnico, onde ele vai depender de receber o valor quando for clicado no Select do GRIDVIEW.   Coloquei um GRIDVIEW  ligado a um datasource SqlClientes (select * from clientes)   A ordem dos componentes está, primeiro deve aparecer o DetaislViews e embaixo dele o GridViews.   Desta maneira esta acontecendo que o DetaislViews na primeria vez que o formulário é carregado ele não aparece, pois, ainda não tem nenhum código passado pelo select.   Qdo chamo a tela pela primeira vez, só vem o GRIDVIEW, ai qdo clico no Select é q aprece o DetaislViews.   -- Obs: Tentei anexar arquivo, mas  não consegui.    
Responder

Gostei + 0

17/11/2008

Sergio Santos

  A questão pendente é como fazer para que o DetaislViews aparece na primeira vez que a tela for carregada junto com o GRIDVIEW?   Existe alguma maneira de trocarmos o SQLDATASOURCE q esta vinculado a ele dinamicamente?   Abs Sérgio
Responder

Gostei + 0

17/11/2008

[devmedia .net]

Bom, agora ficou mais claro.. Cara, o correto é isso mesmo, o DetailsView aparecer somente quando você coloca valor nele, a mesma coisa ocorre como GridView, se reparar ele só aparece se tiver registros. Mas existe uma maneira dele aparecer no carregamento da tela, a solução é simples...   If(!IsPostback) {      }  
Responder

Gostei + 0

17/11/2008

[devmedia .net]

  Adicione ao código....

if(!IsPostBack) {
    DetailsView1.DataBind();
}

Abraços   Aguardo retorno   Carlos Jr
Responder

Gostei + 0

17/11/2008

Sergio Santos

Carlos   Já tinha pensando nisso também, mas esbarrei na questão que mesmo por postBack, o DetailsViews vai ficar aguardando um Codigo passado pela GRIDVIEW.   Inicialmente para resolver a questão estou definindo um valor default para o DetailsView, mas a questão é q eu tenho que definir um valor especifico. Teria alguma maneira de definir uma condição, tipo, o 1o. registro ?  
Responder

Gostei + 0

17/11/2008

[devmedia .net]

Opa, isso que você quer fazer é meio gambiarra... hehehe   Vamos fazer da maneira correta blz !?   Seguinte, como te falei o estado normal de um detailsview é invisívil caso não haja registros, pois não há necessidade de se mostrar um objeto se ele não tem registros. Mas existem uma solução..   Utilize as 3 propriedades abaixo para resolver seu problema... Veja qual se adapta ao que vcoê deseja, pois as três tem o mesmo fundamento, mostrar alguma informação quando não há registro.     EmptyDataRowStyle Obtém uma referência ao objeto TableItemStyle que permite que você definir a aparência da linha de dados vazio exibida quando o fonte de dados vinculado a um controle DetailsView não contém os registros.   EmptyDataTemplate Obtém ou define o conteúdo definido pelo usuário para a linha de dados vazio processado quando um controle DetailsView está vinculado a um fonte de dados que não contém os registros.   EmptyDataText Obtém ou define o texto para Exibir na linha de dados vazio processados quando um controle DetailsView está vinculado a um fonte de dados que não contém os registros.   Abraços   Aguardo contato...   Carlos Jr
Responder

Gostei + 0

17/11/2008

[devmedia .net]

E aí Sérgio, blz ?   Conseguiu resolver ? Algum problema ?   Aguardo seu contato..   Abraços   Carlos Jr
Responder

Gostei + 0

17/11/2008

Sergio Santos

Carlos   Este comandos são interessantes mas pelo que entendi, são apenas para o caso da tabela estar vazia, o que não é o caso,  porque a base de dados que tenho já esta populada.   A questão é que o DetailsViews na 1a. vez, fica aguardando um ID do GRIDVIEW, enqto eu não clico no Select, que passa este Valor, o detailsview não aparece.   Como vc disse, a questão de definir um valor default é meio gambiarra, pq na pratica, eu teria q saber pelo menos o valor inicial de cada tabela ou fazer uma select que decobrisse pelo menos o ultimo codigo do ultimo registrao cadastrado para poder passar como parametro para o detailsviews. A questão que não sei como é que posso passar este valor para o DetailsViews da mesma maneira que o GridView passa, qdo clicamos no select.   O problema não é a tabela vazia. O problema é que na 1a. execução o detaislview não aparece pq não tem um valor para o seu select.    
Responder

Gostei + 0

17/11/2008

[devmedia .net]

Bom, como eu lhe disse, o detailsview não deve aparecer enquanto não houver dados nele selecionado, é como ele nasceu... Cara, se você mostrar um registro no DetailsView logo que entra na tela, está errado.. pois o usuário não selecionou nenhum registro, porquê mostraria o detalhe de um registro no DetailsView de um registro que não foi selecionado...   A função do DetailsView é mostrar um registro que foi selecionado, que no caso que você está querendo no existe.   o componente não foi desenvolvido para essa função, se deseja manipular os campos de um detalhe, crie seu prórprio form em uma DIV e coloque o método selecionar jogando os valores para dentro dos campos da DIV, sacou !?   Fiz vários testes, e várias pesquisas.. O DetailsView não funciona da forma que você deseja, terá que criar a parte de detalhes na mão, que não é complicado fazer isso.. é bem fácil.. A Msft desenvolve ferramentas para facilitar sua vida, não para complicar, se caso a ferramente não lhe atende faça uma...   Bom se precisar de uma ajuda para fazer a parte de detalhes me fale, que lhe ajudo.   Abraços   Carlos Jr
Responder

Gostei + 0

18/11/2008

Sergio Santos

Carlos Bom Dia   Me senti agora na beira de um abismo... Sem saida!!! Esta é a parte chata de se trabalhar com Wizards.   Apenas para contornar a situação e fecharmos este post, (antes que o Guinter puxe a nossa orelha rs.rs), até consegui uma solução menos "POG", qual daqueles três eventos que vc indicou, seria o mais indicado para que o DetaislViews aparecesse na tela, de modo vazio, apenas em exibição? Até tentei deixar o DetailsViews em DefaultMode Insert, mas ai não consigo fazer a Alteração/Exclusão.   Resolvendo isto já ta bom pra mim.   Abs Sérgio  
Responder

Gostei + 0

18/11/2008

[devmedia .net]

Fala Sérgio, bom como lhe disse, não há como mostar o controle DetailsView sem dados dentro, a não ser que selecione um registro para ele mostrar os detalhes entende. Ele foi desenvolvido para mostrar detalhes, caso não há nenhum ele não será exibido. As propriedades que lhe mostrei é justamente para mostar um mensagem quando não existir detalhes de um registro selecionado, isso não resolve seu caso.   É simples você desenvolver seu próprio detailsview, crie uma div com os campos internamente, não utilize DataSource´s , utilize consultas comuns de um registro selecionado e no método de retorno, coloque os valores em seus respectivos campos. Seria uma consulta simples mesmo, sem wizards (bléééhh) .   Abraços   no aguardo   Carlos Jr
Responder

Gostei + 0

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

Aceitar