none
Passando valor da variável para outras páginas! RRS feed

  • Pergunta

  • Boa tarde!

       Eu tenha um gridview com um botão visualizar!"

      Quando clicar nete botão todas as informações do cliente que contém na linha terá que aparecer em uma outra página.

    Então vamos ao que eu tenho hoje:

       na página cad_cli.aspx tenho o gridview com suas 7 colunas, quando clico em visualizar pego a posição da linha e passo para  um parametro o id_cliente.

      Agora preciso abrir a outra página já com tdas as informações do mesmo. Como fazer?

            if (e.CommandName == "visu")
            {
                int row = Convert.ToInt32(e.CommandArgument.ToString());
                int idcliente = (int)GridView1.DataKeys[row].Value;

                Cadastro_Cli SelectCli = new Cadastro_Cli();
                string idcli = Convert.ToString(idcliente);

                bool conn = SelectCli.SelectClient(idcli);

                if (conn == true)
                {
                    String script = "";
                    script += "<script language='JavaScript'>";
                    script += "window.open('show_cliente.aspx','', " +
                     "'resizable=no, menubar=no,scrollbars=no," +
                     "width=450,height=450')";
                    script += "</script>";
                    ClientScript.RegisterClientScriptBlock(GetType(),
                      "client", script);
                }
            }

     Podem me ajudar por gentileza?

    segunda-feira, 28 de maio de 2012 19:29

Respostas

  • Mr. não consegui =(

    pq assim. nesse meu grid tenho a coluna Excluir e Visualizar. então eu passo por RowCommand e vc estapassando pelo RowDataBound.

    Tá dificiiil =.(

     

    Ok, veja este exemplo:

    .aspx
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title></title>
        <script type="text/javascript">
            function PopupCentralizado(url, largura, altura) {
    
                var widthAtual = screen.width;
                var heightAtual = screen.height;
    
                var meioWidth = widthAtual / 2;
                var meioHeight = heightAtual / 2;
    
                var alturaJanela = altura / 2;
                var larguraJanela = largura / 2;
                var meioHeightCorrigido = meioHeight - alturaJanela - 30;
                var meioWidthCorrigido = meioWidth - larguraJanela;
    
                window.open(url, '', 'height=' + altura + ', width=' + largura + ', top=' + meioHeightCorrigido + ', left=' + meioWidthCorrigido + ',scrollbars=1');
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:GridView runat="server" ID="grvClientes" AutoGenerateColumns="false" OnRowCommand="grvClientes_RowCommand">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:LinkButton Text="Excluir" ID="lkExcluir" CommandName="Excluir" CommandArgument='<%# Eval("IDCliente") %>'
                                runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:LinkButton Text="Visualizar" ID="lkVisualizar" CommandName="Visualizar" CommandArgument='<%# Eval("IDCliente") %>'
                                runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField DataField="Nome" HeaderText="Nome" />
                </Columns>
            </asp:GridView>
        </div>
        </form>
    </body>
    </html>
    

    .cs
    using System;
    using System.Data;
    using System.Linq;
    using System.Collections.Generic;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace WebApplication1
    {
        public class Cliente
        {
            public int IDCliente { get; set; }
            public string Nome { get; set; }
        }
    
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                //Criando lista de clientes ficticios
                List<Cliente> lista = new List<Cliente>
                {
                    new Cliente { IDCliente = 1, Nome = "Roberto" },
                    new Cliente { IDCliente = 2, Nome = "Julio" },
                    new Cliente { IDCliente = 3, Nome = "Ingrid" },
                    new Cliente { IDCliente = 4, Nome = "Vitor" }
                };
    
                //Atribuindo ao GridView
                grvClientes.DataSource = lista;
                grvClientes.DataBind();
    
            }
    
    
            protected void grvClientes_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                switch (e.CommandName)
                {
    
                    case "Excluir":
                        //Sua rotina para excluir aqui
                        break;
    
                    case "Visualizar":
                        ClientScript.RegisterClientScriptBlock(GetType(), "script", "<script type='text/javascript'>PopupCentralizado('MinhaPagina?idCliente=" + e.CommandArgument + "',700,600)</script>");
                        break;
                }
            }
    
        }
    }

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    terça-feira, 29 de maio de 2012 16:00

Todas as Respostas

  • Douglas você pode tentar atribuir este ID do cliente em uma Session e recuperar na pagina "show_cliente.aspx" ou passar via querystring, veja este link la em baixo quando ele codifica o botão vizualizar:

    http://comunidade.codificando.net/profiles/blogs/aplicacoes-em-n-camadas-com-4

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    segunda-feira, 28 de maio de 2012 20:26
  • Cara tem muitas maneiras de fazer isso, vou passar uma maneira utilizando js.

    primeiro em sua papop, vc teria o seguinte cód..

    Obs; atenção no conteúdo em negrito, são eles que realizará a proeza de passagem de parametros.

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="papop.aspx.cs" Inherits="papop" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script>
            function PopularFormPapop() {
                var valor = window.opener.CarregarValores(); //chama função na página pai
                document.forms[0].txtRecebeValor.value = valor; //seta valor no conteúdo da papop.
            }
        </script>
    </head>
    <body onload="PopularFormPapop();">
        <form id="form1" runat="server">
        <input type="text" id="txtRecebeValor" name="txtRecebeValor" />
        </form>
    </body>
    </html>

    Página Pai.

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script> function CarregarValores() { //varrer formulario passando o que desejar, lembrando que vc pode até mesmo serializar o form e passar o formulário todo!

    //o seu conteúdo para a papop. var vlr1 = document.forms[0].txtValor1.value; return vlr1; } function Abrir() {

    //abrir papop ao clicar no btn. window.open("papop.aspx", "Pegar Valor da página Default", 'width=500,height=500'); } </script> </head> <body> <form id="form1" runat="server"> <input type="text" id="txtValor1" name="txtValor1" /> </form> <button onclick="Abrir();"> Passar Valor agora! </button> </body> </html>


    espero ter ajudado.

    Atenciosamenet.


    • Editado Romy Moura segunda-feira, 28 de maio de 2012 20:34
    segunda-feira, 28 de maio de 2012 20:33
  • Oi boa noite!

     Obrigado pelo retorno, porém olha a minha atual situação:
     

     Na página pai tenho:

            if (e.CommandName == "visu")
            {
                int row = Convert.ToInt32(e.CommandArgument.ToString());
                int idcliente = (int)GridView1.DataKeys[row].Value;

                Cadastro_Cli SelectCli = new Cadastro_Cli();
                string idcli = Convert.ToString(idcliente);

                bool conn = SelectCli.SelectClient(idcli);

                if (conn == true)
                {
                    string url;
                    url = "show_cliente.aspx?id_cliente=" + idcli;
                    Response.Redirect(url);
            }

    Página filho:

            

            int idcliente = Convert.ToInt32(Request.QueryString["id_cliente"]);

            Cadastro_Cli SelectCli = new Cadastro_Cli();
            string idcli = Convert.ToString(idcliente);

            bool conn = SelectCli.SelectClient(idcli);
            if (conn == true)
            {
                lblCodCli.Text = Convert.ToString(SelectCli.Codcli);
                lblCNPJ.Text = SelectCli.Cnpj;
                lblR_social.Text = SelectCli.R_social;
                lbltipodeconta.Text = SelectCli.Tipodeconta;
                lblfantasia.Text = SelectCli.Fantasia;
                lblpais.Text = SelectCli.Pais;

    etc... etc...

    }}

      enfim.. passo somente o id_cliente por querystring, recupera na page filho e faço a query para preencher minhas lbls da tela.  Ok legal.

     Agora como fazer isso abrir em POP-Up? pq antes eu fazia assim na página pai:

                   String script = "";

                    script += "<script language='JavaScript'>";
                    script += "window.open('show_cliente.aspx','', " +
                     "'resizable=no, menubar=no,scrollbars=no," +
                     "width=420,height=480')";
                    script += "</script>";
                    ClientScript.RegisterClientScriptBlock(GetType(),
                      "client", script);

     Porém não sabia passar a querystring =(

    segunda-feira, 28 de maio de 2012 21:16
  • Olá Douglas, vc pode criar um campo hiddenfield ou guardar em session.

    Caso vc utiliza meu exemplo guarde o id em um hiddenfield para recuperar o id que vc clicou certo.

    Caso utilize uma session, não precisa usar meu exemplo basta utilizar o valor da session e chamar metodos para popular sua papop, no caso seria no load da página papop certo.

    Página filho:
    
            
            int idcliente = Convert.ToInt32(valor hiddenfield ou session["id"]);
    
            Cadastro_Cli SelectCli = new Cadastro_Cli();
            string idcli = Convert.ToString(idcliente);
    
            bool conn = SelectCli.SelectClient(idcli);
            if (conn == true)
            {
                lblCodCli.Text = Convert.ToString(SelectCli.Codcli);
                lblCNPJ.Text = SelectCli.Cnpj;
                lblR_social.Text = SelectCli.R_social;
                lbltipodeconta.Text = SelectCli.Tipodeconta;
                lblfantasia.Text = SelectCli.Fantasia;
                lblpais.Text = SelectCli.Pais;
    
    etc... etc...
    Ficou claro? qualquer dúvida só falar!

    segunda-feira, 28 de maio de 2012 21:47
  • Veja este exemplo usando QueryString

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script type="text/javascript">
            function PopupCentralizado(url, largura, altura) {
    
                var widthAtual = screen.width;
                var heightAtual = screen.height;
    
                var meioWidth = widthAtual / 2;
                var meioHeight = heightAtual / 2;
    
                var alturaJanela = altura / 2;
                var larguraJanela = largura / 2;
                var meioHeightCorrigido = meioHeight - alturaJanela - 30;
                var meioWidthCorrigido = meioWidth - larguraJanela;
    
                window.open(url, '', 'height=' + altura + ', width=' + largura + ', top=' + meioHeightCorrigido + ', left=' + meioWidthCorrigido + ',scrollbars=1');
    
                return false;
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:GridView runat="server" ID="grvClientes" AutoGenerateColumns="false" OnRowDataBound="grvClientes_RowDataBound">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:LinkButton Text="Vizualizar" ID="lkVisualizar" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField DataField="Nome" HeaderText="Nome" />
                </Columns>
            </asp:GridView>
        </div>
        </form>
    </body>
    </html>
    

    .cs
    using System;
    using System.Collections.Generic;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace WebApplication1
    {
        public class Cliente
        {
            public int IDCliente { get; set; }
            public string Nome { get; set; }
        }
    
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                //Criando lista de clientes ficticios
                List<Cliente> lista = new List<Cliente>
                {
                    new Cliente { IDCliente = 1, Nome = "Roberto" },
                    new Cliente { IDCliente = 2, Nome = "Julio" },
                    new Cliente { IDCliente = 3, Nome = "Ingrid" },
                    new Cliente { IDCliente = 4, Nome = "Vitor" }
                };
    
                //Atribuindo ao GridView
                grvClientes.DataSource = lista;
                grvClientes.DataBind();
    
            }
    
            protected void grvClientes_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    //Recuperando LinkButton e atribuindo JavaScript
                    LinkButton lk = (LinkButton)e.Row.FindControl("lkVisualizar");
                    lk.OnClientClick = string.Format("return PopupCentralizado('MinhaPagina?idCliente={0}',700,600)", DataBinder.Eval(e.Row.DataItem, "IDCliente"));
                }
            }
        }
    }



    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    segunda-feira, 28 de maio de 2012 21:50
  • Você também pode passar por uma variável de Session["suaVariavel"] e na página que você precisar recuperar o valor recure e remova da Session e armazene no ViewState["suaVariável"].

    Para manipular o valor na variável de sessão/ViewState você pode cria uma propriedade na página. Fica mais limpo o código e fácil de utilizar.

    Abraço.


    terça-feira, 29 de maio de 2012 00:28
  • Se puder, evite o uso demasiado de Session para não sobrecarregar seu servidor. 

    Utilize Hidden ou ViewState, se precisar recuperar um valor após um postback na mesma página em que você está. Se precisar mudar de página, aí ou vc faz via queryString ou session mesmo.

    terça-feira, 29 de maio de 2012 12:32
  • Mr. não consegui =(

    pq assim. nesse meu grid tenho a coluna Excluir e Visualizar. então eu passo por RowCommand e vc estapassando pelo RowDataBound.

    Tá dificiiil =.(

     

    terça-feira, 29 de maio de 2012 14:22
  • Douglas tenho funcionando algo parecido com o que vc quer, faço como o Romy falou, tenho uma grid e nela um commando(select) qdo clicado abro um pop-up com os dados que o usuário clicou, com isso eu guardo os dados em campos hidden tenho esse script

    function ff_reload()
    	    {
    	 	  window.opener.document.forms[0].vales.value = document.frmAlteracao.TotalVales.value;
    	 	  window.opener.document.forms[0].valores.value = document.frmAlteracao.Totalpagar.value;
    		  window.opener.document.forms[0].sequencial.value = document.frmAlteracao.sequencialusuario.value;
    		  window.opener.document.forms[0].matricula.value = document.frmAlteracao.matriculausuario.value;
    		  window.opener.document.forms[0].diario.value = 1;
    		  window.opener.document.forms[0].alterou.value = 1;
    		  window.opener.document.forms[0].fixo.value = 1;
    		  window.opener.document.forms[0].CMD_Calcular.click();
    		  window.close()
    	   }  

    onde os campos .value são campos hidden

    Junior

    terça-feira, 29 de maio de 2012 14:49
  • Use esse método para chamar a popup

    Javascript

    function openWindow(altura, largura, url, opener)
    {
        var maximizar = altura >= screen.availHeight || largura >= screen.availWidth;
        if (maximizar)
        {
            altura = screen.availHeight;
            largura = screen.availWidth;
        }
        
        var scrY = (screen.availHeight - altura) / 2;
        var scrX = (screen.availWidth - largura) / 2;

        if (maximizar && isChrome)
        {
            altura -= 68;
            largura -= 20;
        }
        
        var momentoAtual = new Date();

        opener = typeof opener == 'undefined' || opener == null ? window : opener;
        opener.open(url, "popup_" + momentoAtual.getMilliseconds(), 'scrollbars=1, width=' + largura + ',height=' + altura +
            ',left=' + scrX + ',top=' + scrY);
            
        return false;
    }

    para abrir :  openWindow(600, 800, "../PaginaFilho.aspx?idCliente=idCliente");

    Desenvolva!!!

    terça-feira, 29 de maio de 2012 15:31
  • Mr. não consegui =(

    pq assim. nesse meu grid tenho a coluna Excluir e Visualizar. então eu passo por RowCommand e vc estapassando pelo RowDataBound.

    Tá dificiiil =.(

     

    Ok, veja este exemplo:

    .aspx
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title></title>
        <script type="text/javascript">
            function PopupCentralizado(url, largura, altura) {
    
                var widthAtual = screen.width;
                var heightAtual = screen.height;
    
                var meioWidth = widthAtual / 2;
                var meioHeight = heightAtual / 2;
    
                var alturaJanela = altura / 2;
                var larguraJanela = largura / 2;
                var meioHeightCorrigido = meioHeight - alturaJanela - 30;
                var meioWidthCorrigido = meioWidth - larguraJanela;
    
                window.open(url, '', 'height=' + altura + ', width=' + largura + ', top=' + meioHeightCorrigido + ', left=' + meioWidthCorrigido + ',scrollbars=1');
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:GridView runat="server" ID="grvClientes" AutoGenerateColumns="false" OnRowCommand="grvClientes_RowCommand">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:LinkButton Text="Excluir" ID="lkExcluir" CommandName="Excluir" CommandArgument='<%# Eval("IDCliente") %>'
                                runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:LinkButton Text="Visualizar" ID="lkVisualizar" CommandName="Visualizar" CommandArgument='<%# Eval("IDCliente") %>'
                                runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField DataField="Nome" HeaderText="Nome" />
                </Columns>
            </asp:GridView>
        </div>
        </form>
    </body>
    </html>
    

    .cs
    using System;
    using System.Data;
    using System.Linq;
    using System.Collections.Generic;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace WebApplication1
    {
        public class Cliente
        {
            public int IDCliente { get; set; }
            public string Nome { get; set; }
        }
    
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                //Criando lista de clientes ficticios
                List<Cliente> lista = new List<Cliente>
                {
                    new Cliente { IDCliente = 1, Nome = "Roberto" },
                    new Cliente { IDCliente = 2, Nome = "Julio" },
                    new Cliente { IDCliente = 3, Nome = "Ingrid" },
                    new Cliente { IDCliente = 4, Nome = "Vitor" }
                };
    
                //Atribuindo ao GridView
                grvClientes.DataSource = lista;
                grvClientes.DataBind();
    
            }
    
    
            protected void grvClientes_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                switch (e.CommandName)
                {
    
                    case "Excluir":
                        //Sua rotina para excluir aqui
                        break;
    
                    case "Visualizar":
                        ClientScript.RegisterClientScriptBlock(GetType(), "script", "<script type='text/javascript'>PopupCentralizado('MinhaPagina?idCliente=" + e.CommandArgument + "',700,600)</script>");
                        break;
                }
            }
    
        }
    }

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    terça-feira, 29 de maio de 2012 16:00
  •  Oi Romy, boa tarde!

      Fiz um teste aqui e funcionou. Porém na minha página real de projeto estou com o seguinte problema:

    var vlr1 = document.forms[0].txtValor1.value;

    Usando o componente HiddenField quando coloco document.forms[0]. ele não encontra =*(

    terça-feira, 29 de maio de 2012 17:15
  • Pessoal.. obrigado a todos.. quero dizer q funcionou tdo certinho =) apesar da ajuda de todos acabei usando a solução do Vitor Mendes
    F
    icou muito legal, uma pena que o browser bloqueia né, eu ia fazer com o jQuery com modal,mas tb nao soube como fazer no Vs, sei apenas fazer em sites.

    Cara onde vc estuda isso:
    ClientScript.RegisterClientScriptBlock(GetType(), "script", "<script type='text/javascript'>PopupCentralizado('show_cliente.aspx?id_cliente=" + idcli + "',700,600)</script>");

    Livro de Java com ASpx?

    Eu estou comprando um livro de aspx com Ajax e jquery, acho que já ajuda né.

    Abraço!

    terça-feira, 29 de maio de 2012 17:37
  • Pessoal.. obrigado a todos.. quero dizer q funcionou tdo certinho =) apesar da ajuda de todos acabei usando a solução do Vitor Mendes
    F
    icou muito legal, uma pena que o browser bloqueia né, eu ia fazer com o jQuery com modal,mas tb nao soube como fazer no Vs, sei apenas fazer em sites.

    Cara onde vc estuda isso:
    ClientScript.RegisterClientScriptBlock(GetType(), "script", "<script type='text/javascript'>PopupCentralizado('show_cliente.aspx?id_cliente=" + idcli + "',700,600)</script>");

    Livro de Java com ASpx?

    Eu estou comprando um livro de aspx com Ajax e jquery, acho que já ajuda né.

    Abraço!

    Todo material é bem vindo, se possivel leia um pouco de tudo, até coisas que não são de .NET, o maior aprendizado é tentar e errar.

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    terça-feira, 29 de maio de 2012 23:19