Editar dados de Usuarios
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.
Respostas
Joel Rodrigues
22/07/2014
Celiol.
22/07/2014
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; } }
Celiol.
22/07/2014
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
Celiol.
22/07/2014
Celiol.
22/07/2014
Celiol.
22/07/2014
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
Joel Rodrigues
22/07/2014
Celiol.
22/07/2014
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.
Celiol.
22/07/2014
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.
Joel Rodrigues
22/07/2014
Celiol.
22/07/2014
Celiol.
22/07/2014
Pode dar uma força?
Celiol.
22/07/2014
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
Joel Rodrigues
22/07/2014
Voce vai precisar de OUTRO BOTÃO para salvar os dados. Um para habilitar os campos e outro para salvar.
Celiol.
22/07/2014
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.
Celiol.
22/07/2014
Celiol.
22/07/2014
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.
Celiol.
22/07/2014
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.
Joel Rodrigues
22/07/2014
Celiol.
22/07/2014
Celiol.
22/07/2014
ou algo assim.
Joel Rodrigues
22/07/2014
Celiol.
22/07/2014
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.
Joel Rodrigues
22/07/2014
Celiol.
22/07/2014
Joel Rodrigues
22/07/2014
// 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;
Celiol.
22/07/2014
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.
Celiol.
22/07/2014
Xiiiii, ta dificil a coisa aqui viu.
Celiol.
22/07/2014
Joel Rodrigues
22/07/2014
clientes.Update(cliente);
Verifique o conteúdo das objeto cliente, se ele foi ou não alterado neste ponto.
Celiol.
22/07/2014
Help Joel.
Joel Rodrigues
22/07/2014
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.
Celiol.
22/07/2014
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..
Joel Rodrigues
22/07/2014
Celiol.
22/07/2014
Celiol.
22/07/2014
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.
Joel Rodrigues
22/07/2014
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.
Celiol.
22/07/2014
To trabalhando nisso ainda se achar o erro posto aqui
Hellllp.
Joel Rodrigues
22/07/2014
Celiol.
22/07/2014
Joel Rodrigues
22/07/2014
Celiol.
22/07/2014
Celiol.
22/07/2014
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.
Joel Rodrigues
22/07/2014
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; } } }
Celiol.
22/07/2014
Grato, Miller.
Joel Rodrigues
22/07/2014
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.
Celiol.
22/07/2014
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.
Celiol.
22/07/2014
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
Celiol.
22/07/2014
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.
Joel Rodrigues
22/07/2014
if(IsPostBack)
Quando na verdade eu sugeri assim:
if(!IsPostBack)
Coloque a negação e teste novamente.
Celiol.
22/07/2014
Celiol.
22/07/2014
É 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.
Joel Rodrigues
22/07/2014
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?