Editar dados de Usuarios

.NET

22/07/2014

Ola preciso de uma ajudinha aqui galera. É o seguinte tenho um link que aparece o nome do usuario quando esta logado, e quando ele esta logado e clicar nesse link com seu nome, eu o direciona para uma pagina (meusDados.aspx) que estou tentando carregar os dados dele. Porem quero que ao carregar a pagina os dados dele ja venha carregado nos campos mas apenas para leitura. Entao fiz assim:
  protected void Page_Load(object sender, EventArgs e)
        {
            btnCadCli.Text = "Atualizar";
            pnldadosCLi.Visible = false;
          

                if (Session["cliente"] != null)
                {
                    pnldadosCLi.Visible = true;
                }

            if (IsPostBack)
            {

      //ha galera se alguem tambem puder ajudar nao sei se esta correto assim, mas aqui tenho que passar o codigo do cliente que esta logado para variavel, tenho que pegar pela session o codigo mas nao sei bem como fazer.

                codCLi = cliente.codCliente;

                cliente = clientes.Find(c => c.codCliente == codCLi).First<CLIENTE>();
                    
                txtCpfCli.Text = cliente.cpfCliente;
                txtNomeCli.Text = cliente.nomeCliente;
                dtlEstCli.SelectedValue = cliente.estadoCliente;
                txtCidCli.Text = cliente.cidadeCliente;
                txtEndCli.Text = cliente.enderecoCliente;
                txtMailCli.Text = cliente.emailCliente;
                txtFoneCli.Text = cliente.foneCliente;

         //aqui e para nao deixar ele alterar os dados apenas ler
                txtCpfCli.Enabled = false;
                txtNomeCli.Enabled = false;
                dtlEstCli.Enabled = false;
                txtCidCli.Enabled = false;
                txtEndCli.Enabled = false;
                txtMailCli.Enabled = false;
                txtFoneCli.Enabled = false;
            }


ai apos ele ver os dados se ele clicar no botao atualizar os campos sao liberados com os dados para ele editar, e o botao muda para salvar. Esta assim...
    protected void btnCadCli_Click(object sender, EventArgs e)
        {
//agora estou habilitando os campos para que ele possa editar
            txtCpfCli.Enabled = true;
            txtNomeCli.Enabled = true;
            dtlEstCli.Enabled = true;
            txtCidCli.Enabled = true;
            txtEndCli.Enabled = true;
            txtMailCli.Enabled = true;
            txtFoneCli.Enabled = true;

           btnCadCli.Text = "Salvar";

   //este é o metodo que chamo para realmente ele atualizar os dados (salvar no banco), o codigo dele esta abaixo
            AtualizarCLiente();

            cliente = null;
            clientes = null;
        }


aqui esta o codigo desse metodo que chamei no click do botao

   public void AtualizarCLiente()
        {
            codCLi = int.Parse(txtCpfCli.Text);
            cliente = clientes.Find(c => c.codCliente == codCLi).First<CLIENTE>();

            cliente.cpfCliente = txtCpfCli.Text;
            cliente.nomeCliente = txtNomeCli.Text;
            cliente.estadoCliente = dtlEstCli.SelectedValue;
            cliente.cidadeCliente = txtCidCli.Text;
            cliente.enderecoCliente = txtEndCli.Text;
            cliente.emailCliente = txtMailCli.Text;
            cliente.foneCliente = txtFoneCli.Text;

            clientes.Update(cliente);
            clientes.SaveChanges();

            cliente = null;
            clientes = null;
        }


bem galera esta dando um erro alguem sabe o que pode ser, ou tem algum jeito melhor pra eu fazer isso?

Grato Delivery TI.
Celiol.

Celiol.

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

22/07/2014

Seria bom que você dissesse qual é o erro.
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Nossa Joel todas as perguntas e você quem responde:? kkkk
Então você que é o cara no asp.

Então Joel a principio quero arrumar o problema que citei logo no inicio do código no pageLoad, pois eu coloquei o código para assim que a pagina for carregada os textBox ser preenchidos com os dados do cliente mas isso não acontece.

Acredito que é por causa dessa comparação que tenho que fazer para saber de qual cliente devo carregar os dados deve estar errada então ele não traz nada. Ta certo esse código meu para pegar o codigo do cliente pela session ?

Para simplificar eu tenho que pegar o código do usuario que esta logado, fazer uma query que realize a pesquisa na tabela e encontre os dados cujo codigo seja do cliente logado e carregar os dados nos textBox acho que isso esta dando erro. Olha como fiz.

             protected void Page_Load(object sender, EventArgs e)
        {
            btnCadCli.Text = "Atualizar";
            btnSalvarProf.Text = "Atualizar";

            pnldadosCLi.Visible = false;
            pnldadosProf.Visible = false;

                if (Session["cliente"] != null)
                {
                    pnldadosCLi.Visible = true;

                    if (IsPostBack)
                    {
    //olha aqui é onde ele pega o codigo do cliente e atribui a variavel,  mas acho que esta errado pois ele deve passar o codigo do cliente que esta na session
                        codCLi = cliente.codCliente;

    //aqui é onde ele faz a comparacao para saber se o codigo existe  no banco 
                        cliente = clientes.Find(c => c.codCliente == codCLi).First<CLIENTE>();

   //e aqui ele passa os dados para os textBox 
  //nao sei o que esta errado alem de pegar o codigo da session
                        txtCpfCli.Text = cliente.cpfCliente;
                        txtNomeCli.Text = cliente.nomeCliente;
                        dtlEstCli.SelectedValue = cliente.estadoCliente;
                        txtCidCli.Text = cliente.cidadeCliente;
                        txtEndCli.Text = cliente.enderecoCliente;
                        txtMailCli.Text = cliente.emailCliente;
                        txtFoneCli.Text = cliente.foneCliente;

                        txtCpfCli.Enabled = false;
                        txtNomeCli.Enabled = false;
                        dtlEstCli.Enabled = false;
                        txtCidCli.Enabled = false;
                        txtEndCli.Enabled = false;
                        txtMailCli.Enabled = false;
                        txtFoneCli.Enabled = false;
                    }
                }
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Entao joel ele da um erro Sequence contains no elements, porem quando eu clico no nome do usuario que esta na Session ele nao carrega as informações do usuario nos textBox sabe o que pode estar errado?

Olha como esta meu codigo:

    if (Session["cliente"] != null)
                {
                    pnldadosCLi.Visible = true;

                    if (IsPostBack)
                    {
                        //codCLi = int.Parse(Session.SessionID);
                        cliente = clientes.Find(c => c.codCliente == codCLi).First<CLIENTE>();

                        txtCpfCli.Text = cliente.cpfCliente;
                        txtNomeCli.Text = cliente.nomeCliente;
                        dtlEstCli.SelectedValue = cliente.estadoCliente;
                        txtCidCli.Text = cliente.cidadeCliente;
                        txtEndCli.Text = cliente.enderecoCliente;
                        txtMailCli.Text = cliente.emailCliente;
                        txtFoneCli.Text = cliente.foneCliente;
                        lblDC.Text = cliente.dataCadastroCliente.ToString();

                        txtCpfCli.ReadOnly = true;
                        txtNomeCli.ReadOnly = true;
                        dtlEstCli.Enabled = false;
                        txtCidCli.ReadOnly = true;
                        txtEnd.ReadOnly = true;
                        txtMailCli.ReadOnly = true;
                        txtFoneCli.ReadOnly = true;
                    }


Este codigo esta dentro do pagLoad que era pra ele carregar os dados do cliente que esta session quando ele carregar a pagina porem ele nao carrega os campos com os dados.

Acredito que é porque minha comparação da session nao esta correga. Como eu faço para pegar o codigo do usuario que esta na session?

Grato Delivery TI
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Ola galera consegui carregar agora os dados do cliente nos textBox quando ele esta logado e clica no nome, porem ele esta sempre pegando o primeiro cliente do banco. é o problema que estou tendo de como pegar o código do cliente que esta na session mesmo ai sim ele traz os dados correto alguem sabe como faço para pegar esse código?
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Ola galera alguem pra da uma ajuda?
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Ola Joel estou tentando aqui e agora que to quase la cara estou tetando pegar o codigo do usuario que esta locado para que eu possa passar todos seus dados e ai sim poder editar, porem quando eu clico em editar ele da um erro:

Unable to cast object of type 'System.Int32' to type 'maos.DAO.CLIENTE'.

Esta é a mensagem de erro porem dei uma pesquisada na net e achei no forum MSDN que eu deveria fazer assim:

              //olha so estou tentando passar o codigo do cliente para a variavel codCli

                codCLi = ((CLIENTE)Session["cliente"]).codCliente;

        //aqui estou pesquisando o codigo do cliente que esta na session e passando os dados dele para os textBox
                 cliente = clientes.Find(c => c.codCliente == codCLi).First<CLIENTE>();

                txtCodCli.Text = cliente.codCliente.ToString();
                txtCpfCli.Text = cliente.cpfCliente;
                txtNomeCli.Text = cliente.nomeCliente;
                dtlEstCli.SelectedValue = cliente.estadoCliente;
                txtCidCli.Text = cliente.cidadeCliente;
                txtEndCli.Text = cliente.enderecoCliente;
                txtMailCli.Text = cliente.emailCliente;
                txtFoneCli.Text = cliente.foneCliente;
                lblDC.Text = cliente.dataCadastroCliente.ToString();


mas nao da certo cara tem como da uma ajudinha?

Delivery TI
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/07/2014

Essa variável codCLi é do tipo int?
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Então Joelela é sim mas deu certo cara pelo menos a parte de carregar os dados do cliente nos textbox mas o meu editar nao funcionou tem como dar uma forma, na veradde os textBox vem com os dados do cliente que esta loga. Porem ele só pode ler, apos ele clicar no botão atualizar ele pode editar os dados mas deu erro, ou melhor nao fez nada quando cliquei no botão ele apenas alterou o valor do botao para Salvar como defini mas nao alterou olha o codigo:

   protected void Page_Load(object sender, EventArgs e)
        {
            btnCadCli.Text = "Atualizar";
            btnSalvarProf.Text = "Atualizar";

            pnldadosCLi.Visible = false;
            pnldadosProf.Visible = false;

            if (Session["cliente"] != null)
            {
                codCLi = ((CLIENTE)Session["cliente"]).codCliente;
                
                pnldadosCLi.Visible = true;
                cliente = clientes.Find(c => c.codCliente == codCLi).First<CLIENTE>();

                txtCodCli.Text = cliente.codCliente.ToString();
                txtCpfCli.Text = cliente.cpfCliente;
                txtNomeCli.Text = cliente.nomeCliente;
                dtlEstCli.SelectedValue = cliente.estadoCliente;
                txtCidCli.Text = cliente.cidadeCliente;
                txtEndCli.Text = cliente.enderecoCliente;
                txtMailCli.Text = cliente.emailCliente;
                txtFoneCli.Text = cliente.foneCliente;
                lblDC.Text = cliente.dataCadastroCliente.ToString();
             }
             txtCpfCli.ReadOnly = true;
             txtNomeCli.ReadOnly = true;
             dtlEstCli.Enabled = false;
             txtCidCli.ReadOnly = true;
             txtEnd.ReadOnly = true;
             txtMailCli.ReadOnly = true;
             txtFoneCli.ReadOnly = true;
}

Bem aqui é apenas para ele carregar os dados no textBox quando o cara clicar para em "Meus Dados" blz.

    protected void btnCadCli_Click(object sender, EventArgs e)
        {
            txtCpfCli.Enabled = true;
            txtNomeCli.Enabled = true;
            dtlEstCli.Enabled = true;
            txtCidCli.Enabled = true;
            txtEndCli.Enabled = true;
            txtMailCli.Enabled = true;
            txtFoneCli.Enabled = true;

    //aqui chamo o metodo que atualiza os dados do cliente
            AtualizarCLiente();

            cliente = null;
            clientes = null;
        }

//metodo que atualiza os dados 
  public void AtualizarCLiente()
        {
            codCLi = int.Parse(txtCodCli.Text);
            cliente = clientes.Find(c => c.codCliente == codCLi).First<CLIENTE>();

            cliente.cpfCliente = txtCpfCli.Text;
            cliente.nomeCliente = txtNomeCli.Text;
            cliente.estadoCliente = dtlEstCli.SelectedValue;
            cliente.cidadeCliente = txtCidCli.Text;
            cliente.enderecoCliente = txtEndCli.Text;
            cliente.foneCliente = txtFoneCli.Text;
            cliente.emailCliente = txtMailCli.Text;

            clientes.Update(cliente);
            clientes.SaveChanges();

            cliente = null;
            clientes = null;
        }


Bem Joel se puder da uma força nisso cara fico muito agradecido, tive que dar uma pequena parada nessa parte pois agora estou tentando fazer a integração com a API de assinatudo do pagSeguro mas ta F#d@ cara aqui no site tem algum tutorial ou video? Sabe me dizer. OU ja fez isso cara.
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Então Joelela é sim mas deu certo cara pelo menos a parte de carregar os dados do cliente nos textbox mas o meu editar nao funcionou tem como dar uma forma, na veradde os textBox vem com os dados do cliente que esta loga. Porem ele só pode ler, apos ele clicar no botão atualizar ele pode editar os dados mas deu erro, ou melhor nao fez nada quando cliquei no botão ele apenas alterou o valor do botao para Salvar como defini mas nao alterou olha o codigo:

   protected void Page_Load(object sender, EventArgs e)
        {
            btnCadCli.Text = "Atualizar";
            btnSalvarProf.Text = "Atualizar";

            pnldadosCLi.Visible = false;
            pnldadosProf.Visible = false;

            if (Session["cliente"] != null)
            {
                codCLi = ((CLIENTE)Session["cliente"]).codCliente;
                
                pnldadosCLi.Visible = true;
                cliente = clientes.Find(c => c.codCliente == codCLi).First<CLIENTE>();

                txtCodCli.Text = cliente.codCliente.ToString();
                txtCpfCli.Text = cliente.cpfCliente;
                txtNomeCli.Text = cliente.nomeCliente;
                dtlEstCli.SelectedValue = cliente.estadoCliente;
                txtCidCli.Text = cliente.cidadeCliente;
                txtEndCli.Text = cliente.enderecoCliente;
                txtMailCli.Text = cliente.emailCliente;
                txtFoneCli.Text = cliente.foneCliente;
                lblDC.Text = cliente.dataCadastroCliente.ToString();
             }
             txtCpfCli.ReadOnly = true;
             txtNomeCli.ReadOnly = true;
             dtlEstCli.Enabled = false;
             txtCidCli.ReadOnly = true;
             txtEnd.ReadOnly = true;
             txtMailCli.ReadOnly = true;
             txtFoneCli.ReadOnly = true;
}

Bem aqui é apenas para ele carregar os dados no textBox quando o cara clicar para em "Meus Dados" blz.

    protected void btnCadCli_Click(object sender, EventArgs e)
        {
            txtCpfCli.Enabled = true;
            txtNomeCli.Enabled = true;
            dtlEstCli.Enabled = true;
            txtCidCli.Enabled = true;
            txtEndCli.Enabled = true;
            txtMailCli.Enabled = true;
            txtFoneCli.Enabled = true;

    //aqui chamo o metodo que atualiza os dados do cliente
            AtualizarCLiente();

            cliente = null;
            clientes = null;
        }

//metodo que atualiza os dados 
  public void AtualizarCLiente()
        {
            codCLi = int.Parse(txtCodCli.Text);
            cliente = clientes.Find(c => c.codCliente == codCLi).First<CLIENTE>();

            cliente.cpfCliente = txtCpfCli.Text;
            cliente.nomeCliente = txtNomeCli.Text;
            cliente.estadoCliente = dtlEstCli.SelectedValue;
            cliente.cidadeCliente = txtCidCli.Text;
            cliente.enderecoCliente = txtEndCli.Text;
            cliente.foneCliente = txtFoneCli.Text;
            cliente.emailCliente = txtMailCli.Text;

            clientes.Update(cliente);
            clientes.SaveChanges();

            cliente = null;
            clientes = null;
        }


Bem Joel se puder da uma força nisso cara fico muito agradecido, tive que dar uma pequena parada nessa parte pois agora estou tentando fazer a integração com a API de assinatudo do pagSeguro mas ta F#d@ cara aqui no site tem algum tutorial ou video? Sabe me dizer. OU ja fez isso cara.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/07/2014

Não vi aí onde é que você habilita os campos para edição. E onde você chama essa função AtualizarCliente?
GOSTEI 0
Celiol.

Celiol.

22/07/2014

O loco joel logo no começo dessa ultima pergunta que fiz cara esta já no evento do botão cadCLiente, ja começo habilitando os campos e logo abaixo chamo o método atualizar de uma olhada como esta. Mas estou tentando aqui e acho vai..
GOSTEI 0
Celiol.

Celiol.

22/07/2014

E ai joel blz cara eu to tentando aqui mas ainda não consegui nada. Não da nenhum erro porem ele não salva com os novos dados, e apos eu clicar no botao salvar ele mostra os mesmos dados e nao o dado atualizado.

Pode dar uma força?
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Joel olha cara acabei de ver aqui o que esta acontecendo se acredita cara que passei varias vezes pelo erro mas demorou pra cair minha fixa...kkkk.

Bem é seguinte, o que esta acontecendo é que quando eu clico em (editar dados) ele me direciona para a pagina dos dados tudo blz e os campos desabilitados, ai quando eu clico no botao atualizar ele esta desabilitando os botoes. porem eu coloquei uns brackPoints no evento atualizar dados e olha o que ta acontecendo, os textBox obviamente ja estão recebendo os dados que vem do cliente logado, ai quando eu altera algo ele nao passa la para o campo pois ja esta preenchido, olha o que ele fez depois que habilitou os campos:

    //método que atualiza os dados 
  public void AtualizarCLiente()
        {
  //olha essa linha eu alterei pois tem que ser o código do cliente que esta logado (da session)
            codCLi = int.Parse(txtCodCli.Text);

//esta correto assim Joel passar o código do usuário na session?
           codCli = ((CLIENTE)Session["cliente"]).codCliente;

//bem agora vai vendo o que aconteceu com os brackPoints

//aqui nessa linha coloquei um (e na instancia do cliente ele ja tinha os dados) acredito que ate aqui tudo blz pois os dados vem do banco carregado no textBox
            cliente = clientes.Find(c => c.codCliente == codCLi).First<CLIENTE>();
 
//aqui os dados que quero alterar ja estao com os valores passando para uma instancia do cliente tambem os mesmo que foram carregados do banco
            cliente.cpfCliente = txtCpfCli.Text;
            cliente.nomeCliente = txtNomeCli.Text;
            cliente.estadoCliente = dtlEstCli.SelectedValue;
            cliente.cidadeCliente = txtCidCli.Text;
            cliente.enderecoCliente = txtEndCli.Text;
            cliente.foneCliente = txtFoneCli.Text;
            cliente.emailCliente = txtMailCli.Text;
 
// aqui que percebi o problema quando ele me manda pra ca no brackpoint  dessa linha (cliente = clientes.Find(c => c.codCliente == codCLi).First<CLIENTE>();
//ai a hora que eu clico em continuar ele ja pula aqui para fazer o commit e salvar os dados mas nao os dados alterados e sim os dados que ja vieram do banco
//entendeu agora o problema, como tenho que fazer para alterar esses dados antes dele mandar salvar?
            clientes.Update(cliente);
            clientes.SaveChanges();
 
            cliente = null;
            clientes = null;
        }


Grato Delivery TI
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/07/2014

Pois é, amigo, foi isso que eu vi. Você estava habilitando os campos e salvando os dados imediatamente, aí acontecia isso que você viu.
Voce vai precisar de OUTRO BOTÃO para salvar os dados. Um para habilitar os campos e outro para salvar.
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Xii Joel tentei cara ja com outro botão mas também nao funcionou olha como esta agora com o botao salvar:

     protected void btnSave_Click(object sender, EventArgs e)
        {
            codCliente = txtCpfCli.Text;
            cliente = clientes.Find(c => c.cpfCliente == codCliente).First<CLIENTE>();

            cliente.cpfCliente = txtCpfCli.Text;
            cliente.nomeCliente = txtNomeCli.Text;
            cliente.estadoCliente = dtlEstCli.SelectedValue;
            cliente.cidadeCliente = txtCidCli.Text;
            cliente.enderecoCliente = txtEndCli.Text;
            cliente.foneCliente = txtFoneCli.Text;
            cliente.emailCliente = txtMailCli.Text;
            cliente.dataCadastroCliente = DateTime.Now;

            clientes.Update(cliente);    
 //porem aqui quando vou ver os dados que vão ser salvos na entidade cliente são os mesmos na verdade ele nao esta passando os dados que eu atualizei e sim os que ja tem.
            clientes.SaveChanges();

            cliente = null;
            clientes = null;
        }


O que esta errado cara.
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Nossa galera nada ainda ja adicionei o outro botão e o código para salvar os novos dados como podem ver no código do comentário acima porem ele ainda ja vem com as informações que foram preenchidas do banco de dados e não esta alterando.
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Nossa agora tentei colocar os textbox como null pra depois fazer a comparação e assim atribuir os valores atualizados na entidade cliente porém ele não deu certo.


Xiiii galera não sei onde esta o erro mas já comparei com um aqui que eu fiz e ta tudo certo.

Alguém ta vendo algo que estou deixando passar ?

Grato. Miller.
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Nossa agora tentei colocar os textbox como null pra depois fazer a comparação e assim atribuir os valores atualizados na entidade cliente porém ele não deu certo.


Xiiii galera não sei onde esta o erro mas já comparei com um aqui que eu fiz e ta tudo certo.

Alguém ta vendo algo que estou deixando passar ?

Grato. Miller.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/07/2014

Você está usando Entitfy Farmework? Se sim, após definir as propriedades do objeto cliente, altere o estado do objeto para alterado.
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Sim estou trabalhando com entity.
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Nao entendi joel, voce fala pra eu chamar o metodo saveChange?
ou algo assim.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/07/2014

No objeto Cliente, tem uma propriedade que não lembro o nome agora. Acho que é State ou ObjectState, que define se ela foi alterada. Talvez modificando ela, o EF entenda que esse objeto foi modificado e precisa ser atualizado.
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Nossa Joel ja tentei de tudo mas nao encontrei nada parecido com esse nome nao cara.
O que tem aqui é o EntityState seria isso que esta falando? Se for tem outro problema pois pelo que vi ele é mais pra eu comparar cara.

DeliveryTI.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/07/2014

Você tentou alterar essa propriedade, como eu sugeri?
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Sim.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/07/2014

Tente assim:
// modificar o objeto "cliente", alterando suas propriedades conforme necessário
context.Entry(cliente).State = EntityState.Modified;
context.SaveChanges();

Onde:
- context é a instância do DBContext;
- cliente é a instância do tipo Cliente, que é a entidade;
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Joel o que ta acontecendo ainda e o seguinte cara eu tentei varias outras coisas aqui que sei pra atualizar os dados porem ele nem esta passando o novo valor que eu digito porque como os textbox ja vem com os dados ele ja atribui para a instancia e nao passa o novo dado que eu digitei.
Coloquei um brackPoint bem nessa linha para ver o que ele esta passando para instancia cliente e ele esta passando os mesmo dados que vem do banco.

        clientes.Update(cliente);


E nas linhas que eu alterei coloquei um brack para ver se passa o dado que eu alterei e ele nao passa na verdade quando vou ver o que tem ja tem o dado que vem do banco.
Por exemplo, no textbox endereco ele carrega o dado (Riachos), quando vou ver antes de editar ja esta la na entidade cliente.endereco (Riachos), ai eu edito o dado para (RIacho Verde) e quando o cai no backpoint ele me leva na no cliente.endereco, mas la nao foi atualizado continua apenas (Riachos).

Tentei antes de passar os dados para a entidade cliente, colocar os textbox tudo como null, mas ai quando eu executei a aplicacao ele deu erro ao tentar carregar a pagina (object no contain elements).

Qual sera a saida agora.

Grato DeliveryTI.
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Ha Joel eu vi isso em algum lugar pesquisando aqui cara porem esse (Entry) e tambem o (EntityState) nao consigo corrigir de maneira alguma nem importando o (using System.Web.HttpContext) ele diz que nao contem uma definicao.

Xiiiii, ta dificil a coisa aqui viu.
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Alguem pode ajudar ainda nao resolvi galera.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/07/2014

Lá no método btnSave_Click, coloque um breapoint na seguinte linha:
clientes.Update(cliente);

Verifique o conteúdo das objeto cliente, se ele foi ou não alterado neste ponto.
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Eu já fiz isso Joel e ele não está passando os novos dados que coloco mas sim os mesmos que já trouxe do banco.

Help Joel.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/07/2014

Pode parecer repetitivo, mas preciso perguntar para entender o que está havendo.
Coloque novamente o breakpoint e verifique agora o conteúdo dos TextBoxes. Verifique se na propriedade Text deles está o conteúdo que você acabou de digitar, ou o conteúdo antigo.
Observação: certifique-se de digitar algo diferente nos TextBoxes.
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Joel cara nao expliquei o problema direito cara desculpa.

Na verdade o problema nao esta em passar um dado pela url, o problema é o seguinte eu tenho um datalist e trabalho com duas propriedades dele (ItemTemplate e o AlternateItemTemplate) acredito que voce saiba bem como eles funcionam, mas pra quem nao sabe eu eu carrego os meus dados do banco neles, e funciona assim primeiro dado ele atribui ao ItemTemplate o segundo ao AlternateItemTemplate e assim por diante alternando entre eles.
Pois bem e dentro de cada item desses eu tenho um botão que quando o cara clica leva ele para outra pagina mas que é relacionada ao dados do profissional que ele clicou, e para eu fazer um insert para este profissional eu preciso pegar o Código dele dentro desse ItemTemplate ou AlternateItemTemplate porem eu não sei como fazer para pegar esse código tentei assim:

Olha galera a tela com meus dados no datalist e esse codigo logo acima que eu tenho que passar na url

[img:descricao=Imagens do meu datalist]http://arquivo.devmedia.com.br/forum/imagem/335183-20140909-160353.png[/img]

Bem galera o maior problema pra vocês terem ideia é o seguinte, quando eu clicar em um profissional em algum item do meu datalist e pegar o codigo do profissional que ele clicou, pois aqui como so tenho dois profissionais, cada um tem um codigo o itemTemplate tem o codigo 1, e o AlternateItemTemplate tem o codigo 3, como podem ver na imagem, mas quando eu tiver cadastrar um terceiro profissional ele tambem vai aparecer em um ItemTamplate, e ai que ta o problema como eu pegar o codigo e passar pela url exatamente o que ele clicou.

Alguem pode ajudar por favor.

olha como eu populo meu Datalist:

    protected void dtlProfissionais_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            if (e.Item.ItemType != ListItemType.Header && e.Item.ItemType != ListItemType.Footer)
            {
                if (Session["cliente"] != null)
                {
                    ((Image)e.Item.FindControl("imgProf")).ImageUrl = "http://localhost:3719/Servicos/" + ((PROFISSIONAL)e.Item.DataItem).fotoProf1.ToString();

                    ((Label)e.Item.FindControl("lblcodPr")).Text = ((PROFISSIONAL)e.Item.DataItem).codProfissional.ToString();

      // olha so galera aqui é onde ele pega o codigo do profisional para exibir na tela.

                    ((Label)e.Item.FindControl("lblnome")).Text = ((PROFISSIONAL)e.Item.DataItem).nomeProfissional;
                    ((Label)e.Item.FindControl("lblFonePr")).Text = ((PROFISSIONAL)e.Item.DataItem).foneProfissional;
                    ((Label)e.Item.FindControl("lblTipoProfi")).Text = ((PROFISSIONAL)e.Item.DataItem).TIPOPROFISSIONAL.descTipoProf;
                    ((Label)e.Item.FindControl("lblDesc")).Text = ((PROFISSIONAL)e.Item.DataItem).descProfissional;
                    }
                    ((Button)e.Item.FindControl("btnAval")).Visible = true;
                }
                else {
                    ((Label)e.Item.FindControl("Label6")).Visible = false;
                    ((Label)e.Item.FindControl("lblFonePr")).Visible = false;

                    ((Image)e.Item.FindControl("imgProf")).ImageUrl = "http://localhost:3719/Servicos/" + ((PROFISSIONAL)e.Item.DataItem).fotoProf1.ToString();

                    ((Label)e.Item.FindControl("lblcodPr")).Text = ((PROFISSIONAL)e.Item.DataItem).codProfissional.ToString();
                    ((Label)e.Item.FindControl("lblnome")).Text = ((PROFISSIONAL)e.Item.DataItem).nomeProfissional;
                    ((Label)e.Item.FindControl("lblFonePr")).Text = ((PROFISSIONAL)e.Item.DataItem).foneProfissional;
                    ((Label)e.Item.FindControl("lblTipoProfi")).Text = ((PROFISSIONAL)e.Item.DataItem).TIPOPROFISSIONAL.descTipoProf;
                    ((Label)e.Item.FindControl("lblDesc")).Text = ((PROFISSIONAL)e.Item.DataItem).descProfissional;
                }
}


Por favor algum da uma ajuda de como pegar esse codigo.

Grato Miller..
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/07/2014

Acho que você postou no tópico errado, não? A dúvida aqui não era sobre como editar os dados de um registro?
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Nossa Joel respondi sim cara nem percebi, era pra ser no "como passar dados pela URL" tem como postar lá ou devo comentar novamente?
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Galera esse ultimo comentário que fiz aqui pode desconsiderar alem de ter feito no post errado eu ja resolvi esse problema. Porem o problema com a edição de dados do cliente continuo com problemas galera se alguém souber o que esta de errado esta todo o código de minha edição dos dados aqui e o que esta dando erro.

Mas para quem chegar agora acontece o seguinte, eu clico em editar os dados ele carrega os dados nos textbox blz, quando clico em editar ele habilita os campos pra eu editar, porem quando eu altero por exemplo apenas o nome e dou um salvar, ele não passa o novo nome para minha entidade, fiz como o Joel me solicitou e vi no breakpoint que ele continua com as mesmas informações que ja trouxe do banco e não o que eu editei.

Grato Galera.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/07/2014

Pode parecer repetitivo, mas preciso perguntar para entender o que está havendo.
Coloque novamente o breakpoint e verifique agora o conteúdo dos TextBoxes. Verifique se na propriedade Text deles está o conteúdo que você acabou de digitar, ou o conteúdo antigo.
Observação: certifique-se de digitar algo diferente nos TextBoxes.
GOSTEI 0
Celiol.

Celiol.

22/07/2014

O Joel ai se ja ta me tirando kkkk, sou meio ruim mas nem pra tanto, sim cara coloquei o breackpoint mas ate eu achei tambem que tinha algo errado cara, cheguei ate colocar breackpoint em todas linhas de dados, na hora de salvar para ver os dados que ele passava na minha netidade, porem ele sempre passa os dados que ja trouxe do banco, e estou alterando sim claro, ja cheguei a alterar ate um cadastro inteiro mas nada aconteceu ele nao da erro porem quando clico em salvar ele so faz o reload da pagina e volta com os dados antigos.

To trabalhando nisso ainda se achar o erro posto aqui

Hellllp.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/07/2014

Então, amigo, eu já havia pedido pra você verificar as propriedades da entidade. Só que agora eu pedi para você verificar o texto dos TextBoxes, não sua entidade. Ou seja, após você alterar o texto, ele está permanecendo alterado, ou por algum motivo está retornando ao valor inicial?
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Noa Joel ele vem com o valor anterior o que eu alterei ele nao pega, cara.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/07/2014

Por favor, me mande o código COMPLETO da sua página. Você pode colar no PasteBin, ou fazer upload do arquivo em algum lugar e mandar o link.
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Como assim Joel voce esta falando pra eu fazer upload dele todo mas é um pequeno metodo apenas desse botao editar, posso te mandar um arquivo txt ai voce cola ai no not ++?
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Olha Joel sei que ja coloquei aqui mas vou colocar entao novamente bem estruturado apenas o codigo para editar o cadatro do cliente que esta dando esse prolema, qualquer coisa te mando o codigo da pagina toda.

protected void Page_Load(object sender, EventArgs e)
        {
            pnldadosCLi.Visible = false;
            btnSave.Visible = false;

            if (Session["cliente"] != null)
            {
                codCli = ((CLIENTE)Session["cliente"]).codCliente;
                
                pnldadosCLi.Visible = true;
                cliente = clientes.Find(c => c.codCliente == codCli).First<CLIENTE>();

                txtCodCli.Text = cliente.codCliente.ToString();
                txtCpfCli.Text = cliente.cpfCliente;
                txtNomeCli.Text = cliente.nomeCliente;
                dtlEstCli.SelectedValue = cliente.estadoCliente;
                txtCidCli.Text = cliente.cidadeCliente;
                txtEndCli.Text = cliente.enderecoCliente;
                txtMailCli.Text = cliente.emailCliente;
                txtFoneCli.Text = cliente.foneCliente;
                lblDC.Text = cliente.dataCadastroCliente.ToString();
             }
             txtCpfCli.ReadOnly = true;
             txtNomeCli.ReadOnly = true;
             dtlEstCli.Enabled = false;
             txtCidCli.ReadOnly = true;
             txtEndCli.ReadOnly = true;
             txtMailCli.ReadOnly = true;
             txtFoneCli.ReadOnly = true;
              
            }    
        }

Olha joel essa primeira parte do codigo ele passa os dados da entidade (cliente) para os textbox e ja os desabilita, tudo certo.

   protected void btnEditaCli_Click(object sender, EventArgs e)
        {
            btnEditaCli.Visible = false;
            btnSave.Visible = true;

            txtNomeCli.ReadOnly = false;
            dtlEstCli.Enabled = true;
            txtCidCli.ReadOnly = false;
            txtEndCli.ReadOnly = false;
            txtMailCli.ReadOnly = false;
            txtFoneCli.ReadOnly = false;
        }

Ja este outro metodo somente habilida os textbos quando o cara clicar em editar, e deixa o botao salvar visivel.

   protected void btnSave_Click(object sender, EventArgs e)
        {
            codCliente = txtCpfCli.Text;
            
            cliente = clientes.Find(c => c.cpfCliente == codCliente).First<CLIENTE>();

            cliente.cpfCliente = txtCpfCli.Text;
            cliente.nomeCliente = txtNomeCli.Text;
            cliente.estadoCliente = dtlEstCli.SelectedValue;
            cliente.cidadeCliente = txtCidCli.Text;
            cliente.enderecoCliente = txtEndCli.Text;
            cliente.foneCliente = txtFoneCli.Text;
            cliente.emailCliente = txtMailCli.Text;
            cliente.dataCadastroCliente = DateTime.Now;

            clientes.Update(cliente);
            //Context.Entry(cliente).State = EntityState.Modified;
            //clientes.SaveChanges();
            
            cliente = null;
            clientes = null;

            btnEditaCli.Visible = true;
        }

E por fim o evento do botal salvar alterações que ele deve salver os novos dados, porem como te disse ele nao esta pegando os dados novos digitados e sempre pega os mesmo que trouxe do banco.

Ve se da pra entender melhor agora.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/07/2014

Altere o método Page_Load, adicionando uma verificação de PostBack, da seguinte forma:
protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        pnldadosCLi.Visible = false;
        btnSave.Visible = false;

        if (Session["cliente"] != null)
        {
            codCli = ((CLIENTE)Session["cliente"]).codCliente;
             
            pnldadosCLi.Visible = true;
            cliente = clientes.Find(c => c.codCliente == codCli).First<CLIENTE>();

            txtCodCli.Text = cliente.codCliente.ToString();
            txtCpfCli.Text = cliente.cpfCliente;
            txtNomeCli.Text = cliente.nomeCliente;
            dtlEstCli.SelectedValue = cliente.estadoCliente;
            txtCidCli.Text = cliente.cidadeCliente;
            txtEndCli.Text = cliente.enderecoCliente;
            txtMailCli.Text = cliente.emailCliente;
            txtFoneCli.Text = cliente.foneCliente;
            lblDC.Text = cliente.dataCadastroCliente.ToString();
         }
         txtCpfCli.ReadOnly = true;
         txtNomeCli.ReadOnly = true;
         dtlEstCli.Enabled = false;
         txtCidCli.ReadOnly = true;
         txtEndCli.ReadOnly = true;
         txtMailCli.ReadOnly = true;
         txtFoneCli.ReadOnly = true;       
        }    
    }
}
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Joel realizei o teste que voce falou ai acima pra mas ai um problema dessa maneira ele nao carregou os textbox com os dados do cliente quando eu clico em meus dados, ele vem com os campos em branco, apos eu clicar no editar ele habilita os campos e carrega os dados, mas tentei editar um campo e continua do mesmo jeito ele nao salva o novo dado.

Grato, Miller.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/07/2014

Ok, desfaça então.

Agora faça mais um teste: repita o processo, altere os dados na tela e antes de clicar no botão de salvar, coloque um breakpoint no método Page_Load. Clique então no botão Salvar e veja se a execução para no método Page_Load antes de ir para o código do botão.
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Bem Joel cara aconteceu umas coisas muito estranhas cara, primeiro quando eu coloquei o break no pageLoad, ai quando eu clico la no meus dados para ir para pagina dos dados ele entra la no breack tudo certo dou um F5 para continuar, e ai começa as coisas estranhas cara, primeiro ele traz um codigo no campo codigo muito estranho 0057 nem sei de onde vem isso pois nao tenho esse cadastro nos clientes tenho so ate o 8, e os campos nao vem desabilitados e com os dados vem em branco e habilitados para digitacao.

Mas ai continuei assim mesmo pra ver, quando clico no botao editar ai sim ele carrega os campos com os dados do cliente, ai eu alterei uns 3dados so para teste, adivinha, ele passou os novos dados porem so passou na hora que as variaveis estao sendo chamadas no pageload, quando fui ver o que ele estava passando no atualizar nao estava os novos dados e sim os antigos ainda cara.
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Joel olha mapeei todo processo e dei uns prints pra você ver o que esta ocorrendo.

olha nessa primeira imagem é quando ele entra no breack apos eu clicar em editar, porem esta com o problema que descrevi acima ele não carrega mais os dados e vem com esse código estranho vê ai na imagem.

[img]http://arquivo.devmedia.com.br/forum/imagem/335183-20140916-133805.png[/img]

Apos esse erro continue com o teste como voce pediu, ele entra no breack do page load e apos clicar em continue f5, ele me leva para a pagina de edicao de dados porem com os campos habilitados, continuando, ele so carrega os dados do cliente apos eu clicar no botao editar veja a foto:

[img]http://arquivo.devmedia.com.br/forum/imagem/335183-20140916-134143.png[/img]

A
GOSTEI 0
Celiol.

Celiol.

22/07/2014

Joel olha mapeei todo processo e dei uns prints pra você ver o que esta ocorrendo.

olha nessa primeira imagem é quando ele entra no breack apos eu clicar em editar, porem esta com o problema que descrevi acima ele não carrega mais os dados e vem com esse código estranho vê ai na imagem.

[img]http://arquivo.devmedia.com.br/forum/imagem/335183-20140916-133805.png[/img]

Apos esse erro continue com o teste como voce pediu, ele entra no breack do page load e apos clicar em continue f5, ele me leva para a pagina de edicao de dados porem com os campos habilitados, continuando, ele so carrega os dados do cliente apos eu clicar no botao editar veja a foto:

[img]http://arquivo.devmedia.com.br/forum/imagem/335183-20140916-134143.png[/img]

Aqui como voce vê ele carrega os dados pra mim, agora tudo correto com os dados do cliente. E ja habilitado para eu editar ai editei alguns campos...

[img]http://arquivo.devmedia.com.br/forum/imagem/335183-20140916-134739.png[/img]

Como voce pode ver Joel aqui ele passa o novo dado Editado para a entidade, porem ainda estou no pageLoad, mas la no metodo do botao salver ele tambem esta passando, mas isso antes dele cair la no metodo.
Veja:

[img]http://arquivo.devmedia.com.br/forum/imagem/335183-20140916-135030.png[/img]

Olha Joel veja como ele passou os novos dados para o metodo salvar, mas isso acontece so enquanto eu estou dentro do breack do pageload, quando ele cai dentro do metodo salvar ele vem novamente com os dados atigos veja ai pra voce ver.

[img]http://arquivo.devmedia.com.br/forum/imagem/335183-20140916-135417.png[/img]

Bem Joel isso é o que ta acontecendo com o meu editar dados cara agora to trabalhando com ele aqui cara pra ver o que ta dando nisso, porque ta estranho, agora sabe o que é?

Grato.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/07/2014

Amigo, reparei que você colocou assim:
if(IsPostBack)

Quando na verdade eu sugeri assim:
if(!IsPostBack)

Coloque a negação e teste novamente.
GOSTEI 0
Celiol.

Celiol.

22/07/2014

nossa cara como disse voce disfarça nem vi isso la cara. vou arrumar e posto aqui o que ocorrer...
GOSTEI 0
Celiol.

Celiol.

22/07/2014

O Joel voce é o cara assim (!IsPostBack) deu tudo certo ele atualizou agora, entao so tire essa duvida minha eu tenho que deixar essa parte do codigo onde ele traz os dados do meu cliente e habilita os campos dentro do ispostback?

É que tenho mais codigo pra alter de outro tipo de profissional mas se esse deu certo o outro é o mesmo erro correto?

Grato de mais Joel.

Miller.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/07/2014

Entenda o funcionamento do IsPostBack e você saberá quando utilizá-lo:

Quando você pressiona algum botão, ou algum outro controle que dispare um evento, a página é recarregada. Quando ela é recarregada, ela passa novamente pelo Page_Load, por isso estava sempre preenchendo os TextBoxes com os valores originais.

A propriedade IsPostBack serve para identificar se a página está sendo recarregada devido ao disparo de um evento desses, ou seja, se o IsPostBack for verdadeiro, indica que você pressionou algum botão, por exemplo que disparou um evento Click. Se o IsPostBack for falso, é porque a página está sendo carregada de forma externa, por exemplo, quando você entra na página pela primeira vez.

No seu caso, você deseja que os dados sejam preenchidos quando a página for carregada na primeira vez, certo? Então, quando clicarmos no botão, os dados não devem ser recarregados. Por isso verificamos e só carregamos os dados para os TextBoxes se não for um Post Back.

Aí é só aplicar a ideia nos demais locais. Sacou?
GOSTEI 0
POSTAR