detailsview
Olá, num webform tenho uma gridview, e quando eu seleciono uma linha, aparece outra gridview com os registros referentes à linha selecionada. Ok, até aqui tudo normal.
Quando eu clico na opção editar da segunda gridview, outro webform é carregado com as informações já exibidas nos textboxes para edição, menos os campos que eu defini como disabled, pois o usuario não pode edita-los.
O numero do id da linha selecionada na primeira gridview também é exibida num campo:
Usuário
Solicitação
Data Abertura
Hora Abertura
Data Atendimento
Hora Início
Hora Fim
Descrição
Atualizar Cancelar
Meu problema é quando eu clico num hiperlink para incluir mais um registro no segundo gridview, pois, ao abrir o webform com o details view para ser preenchido, o numero da solicitação, data e hora, que são preenchidos automaticamente no pageload, não aparecem no textbox:
Usuário
joao luiz Rayberg Ricardo Zoroastro
Solicitação
Data Abertura
Hora Abertura
Data Atendimento
Hora Início
Hora Fim
Descrição
Inserir Cancelar
Aí, para tentar entender o que está acontecendo, eu criei um botão vazio, sem nenhum codigo implementado, e para minha surpresa, ao clicar nele, as informações aparecem:
Usuário
joao luiz Rayberg Ricardo Zoroastro
Solicitação
Data Abertura
Hora Abertura
Data Atendimento
Hora Início
Hora Fim
Descrição
Inserir Cancelar
Por que estas informações não aparecem logo no inicio quando a página é carregada? eu faço estas atribuições nos textboxes no evento pageload, mas eles não aparecem, somente quando a página dá um refresh (clicando no botao).
Não entendo o que está acontecendo...
João Teixeira
Curtidas 0
Respostas
Luiz Maia
30/11/2009
Ola João,
Pode me mandar seu codigo, para que eu possa avaliá-lo.
Aguardo
Att
Luiz Maia
GOSTEI 0
João Teixeira
30/11/2009
Este é o codigo da página dos gridview, quando eu clico no hiperlink para adicionar um novo registro ele faz isso:
public partial class Atendente_Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
var solic = GridView1.DataKeys[e.NewSelectedIndex]["cod_solicitacao_atendimento"].ToString();
HLNovaOS.NavigateUrl = "~/Atendente/DtlsOS.aspx?modo=inclusao&id=" + solic;
}
}
E este é o código da pagina do detailsview: quando a pagina abre no modo inserção, nao aparece o valor recebido pela query string, se eu clico no botão vazio, os dados aparecem.
public partial class Views_Details_DtlsSolicitacao : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
User _user = new User();
DBOOperations dbo = new DBOOperations();
_user = dbo.CheckUser(User.Identity.Name);
//LblUsuario.Text = _user.nome;
if (Request.QueryString["modo"] == "inclusao")
{
DetailsView1.ChangeMode(DetailsViewMode.Insert);
((TextBox)DetailsView1.FindControl("TxtData")).Text = DateTime.Now.ToString("dd/MM/yyyy");
((TextBox)DetailsView1.FindControl("TxtHora")).Text = DateTime.Now.ToString("hh:mm");
((TextBox)DetailsView1.FindControl("TextBox1")).Text = Request.QueryString["id"].ToString();
}
else if (Request.QueryString["modo"] == "edicao")
{
DetailsView1.ChangeMode(DetailsViewMode.Edit);
}
//DetailsView1.DataBind();
}
protected void DetailsView1_ModeChanging(object sender, DetailsViewModeEventArgs e)
{
if ((e.NewMode != (DetailsViewMode.Insert)) || (Request.QueryString["modo"] == "inclusao"))
Response.Redirect("~/Atendente/Default.aspx");
}
protected void Button1_Click(object sender, EventArgs e)
{
}
}
GOSTEI 0
Luiz Maia
30/11/2009
João, vou fazer os testes aqui e ja te mando a solução, ok?
Abraços
Luiz Maia
GOSTEI 0
Luiz Maia
30/11/2009
O que esta acontecendo é que não esta havendo o RoundTrip, ou seja não esta atualizando a pagina, e logo o envento page_load não esta sendo executado.
Coloque um break point no page_load e degug a aplicação.
Sugiro vc criar um outro metodo que vc pode chama-lo de dentro do Page_load e tambem chama-lo novamente ao clicar no Hiperlink, ok?
Aguardo seu contato.
Abraços
Luiz Maia
GOSTEI 0
João Teixeira
30/11/2009
Olá, eu fiz o debug e o page load é esecutado sim.
Ele executa todos os comandos do page load e não exibe nenhum erro.
Mas os controles do detailsview não exibem os dados.
Verifiquei se os parametros passados estão sendo recebidos no page load, e sim, eles são recebidos sim.
GOSTEI 0
Luiz Maia
30/11/2009
Joao, seguinte:
Como não tem jeito de eu simular sua aplicação aqui, pois não tenho sua base de dados.
Preciso que me mande uma aplicação, resumida de onde esta o erro, me mande uma pagina aspx com todo o codigo e etc... se possivel script da tabela que popula o GridView.
Voce pode publicar no Disco Virtual e me passar o link, ok?
Abraços e estou no aguardo
Att
Luiz Maia
GOSTEI 0
João Teixeira
30/11/2009
Mando para onde? Qual email? o conteúdo é do meu trabalho, preciso de discrição... questão de ética.
GOSTEI 0
Luiz Maia
30/11/2009
João, quanto a discrição e etica, pode ficar tranquilo. Este é o prcedimento normal aqui do sistema de Suporte, todos os solicitantes postam e enviam os sistemas, os mesmos são deletados assim que o chamado é concluido, ok?
Voce deve usar o Disco Virtual. A equipe de suporte vai postar aqui os passos, ok?
Abraços
Att
Luiz Maia
GOSTEI 0
Devmedia
30/11/2009
João,
o disco virtual serve para você postar arquivos no formato .zip. por ele você pode enviar para o consultor seu codigo fonte, banco de dados, entre outras informações.
Quanto a discrição, sim, ela é total.
O Suporte DevMedia é um serviço que existe há mais de um ano e sempre mantemos com a essa política. Os dados de nossos clientes são mantidos em total sigilo.
Para utilizar esse serviço, basta clicar na opção "Meu Disco Virtual" na home do suporte.
o disco virtual serve para você postar arquivos no formato .zip. por ele você pode enviar para o consultor seu codigo fonte, banco de dados, entre outras informações.
Quanto a discrição, sim, ela é total.
O Suporte DevMedia é um serviço que existe há mais de um ano e sempre mantemos com a essa política. Os dados de nossos clientes são mantidos em total sigilo.
Para utilizar esse serviço, basta clicar na opção "Meu Disco Virtual" na home do suporte.
GOSTEI 0
João Teixeira
30/11/2009
pronto, coloquei o projeto lá no disco virtual com o banco sqlexpress
GOSTEI 0
Luiz Maia
30/11/2009
Precise que me passe o link para que eu possa baixar...
Aguardo
Luiz Maia
GOSTEI 0
João Teixeira
30/11/2009
Banco de dados.zip
315 KB
http://video.devmedia.com.br/discovirtual/223817/Banco de dados.zip
HeraSupportSite.zip
115 KB
http://video.devmedia.com.br/discovirtual/223817/HeraSupportSite.zip
Seguem os links.
GOSTEI 0
Luiz Maia
30/11/2009
João,
Custou um pouco, mas achei a solução.
Vc deve usar o prerender ao inves do page load:
protected void DetailsView1_PreRender(object sender, EventArgs e)
{
((TextBox)DetailsView1.FindControl("TxtData")).Text = DateTime.Now.ToString("dd/MM/yyyy");
((TextBox)DetailsView1.FindControl("TxtHora")).Text = DateTime.Now.ToString("hh:mm");
((TextBox)DetailsView1.FindControl("TextBox1")).Text = Request.QueryString["id"].ToString();
}
E no seu HTML:
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False"
CellPadding="1" DataKeyNames="cod_ordem_servico,cod_solicitacao_atendimento,usuariocod"
DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None"
Height="50px" onmodechanging="DetailsView1_ModeChanging"
style="margin-right: 0px; margin-top: 0px;" Width="240px"
CaptionAlign="Left" CellSpacing="1" onprerender="DetailsView1_PreRender" >
Abraços
E aguardo um retorno ok?
Att
Luiz Maia
GOSTEI 0
João Teixeira
30/11/2009
Deu certo sim, muito obrigado.
GOSTEI 0
Luiz Maia
30/11/2009
Blz, João.
Precisando é so nos contactar. Abraços e sucesso em seu projeto.
Att
Luiz Maia
GOSTEI 0