none
Como abrir confirm em JS antes de excluir registro do gridview? RRS feed

  • Pergunta

  • Pessoal, boa noite.

    Sou novato no desenvolvimento com webforms e estou tendo o seguinte problema:

    Eu tenho um gridview populado por um dataset, com os campos todos certinhos.

    Adicionei um campo para fazer a exclusão do registro. E está funcionando ok também.

    O problema é que eu tentei fazer com que seja aberto um confirm perguntando se realmente é para apagar o registro, mas não consegui dar sequência no desenvolvimento. Da forma que estou fazendo não consigo obter um resultado booleano ou inteiro para prosseguir com a lógica.

    Poderiam me ajudar?

    Segue a parte da composição do campo no grid:

    <asp:CommandField DeleteText="Apagar" HeaderText="Apagar" ShowDeleteButton="True" ItemStyle-ForeColor="#449D44" >
                                    <ItemStyle ForeColor="#449D44"></ItemStyle>
    </asp:CommandField>

    parte do codebehind onde a exclusão é chamada:

                                     

      protected void grvPets_RowDeleting(object sender, GridViewDeleteEventArgs e)
            {
                var codigo = Convert.ToInt32(e.Values["idPet"]);
                var oPetBus = new PetBUS();

                 Response.Write("<script>confirm('Deseja excluir o registro?');</script>");

                oPetBus.DeletarPet(codigo);
                ListarPets();

            }

    Repetindo, o confirm aparece e independente da escolha, o registro é excluído. É possível obter o resultado do confirm dessa forma? 

    Aproveitando a pergunta, eu tento abrir este mesmo confirm usando:

    Response.Write("<script>bootbox.confirm('Deseja excluir o registro?'');</script>");

    Mas da forma acima, nada acontece (mesmo tendo importado o arquivo js do bootbox, css do bootstrap, etc.)

    Socorro!

    Grato, desde já.

    quinta-feira, 27 de agosto de 2015 23:12

Respostas

  • Olá,

    recomendo que você mude algumas coisas e faça assim:

        public class Cliente
        {
            public int Id { get; set; }
            public string Nome { get; set; }
        }
    
        public partial class _Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                List<Cliente> lista = new List<Cliente>();
                lista.Add(new Cliente()
                {
                    Id = 1,
                    Nome = "Assdsdds"
                });
    
                lista.Add(new Cliente()
                {
                    Id = 2,
                    Nome = "Bssdsdds"
                });
    
                lista.Add(new Cliente()
                {
                    Id = 3,
                    Nome = "Cssdsdds"
                });
    
    
                GridView1.DataSource = lista;
                GridView1.DataBind();
            }
    
            protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                if (e.CommandName == "Apagar")
                {
                    Response.Write(e.CommandArgument);
                }
            }

            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" onrowcommand="GridView1_RowCommand" 
                >
            <Columns>
            <asp:BoundField DataField="Nome" HeaderText="Nome" />
            <asp:TemplateField>
            <ItemTemplate>
            <asp:Label ID="lblID" runat="server" Visible="false"></asp:Label>
            <asp:LinkButton ID="deleteButton" runat="server" CommandArgument='<%#Eval("Id")%>' CommandName="Apagar" Text="Apagar"
    OnClientClick="return confirm('Are you sure you want to delete this user?');" />
            </ItemTemplate>
            </asp:TemplateField>
    </Columns>
            </asp:GridView>


    Att, Lucio Rogerio


    Espero ter ajudado, se ajudei, por favor Vote como Útil, e se resolvi seu problema, clique em Marcar como Resposta.

    • Marcado como Resposta Marcos SJ sexta-feira, 28 de agosto de 2015 15:46
    quinta-feira, 27 de agosto de 2015 23:38
  • Veja que eu coloquei no CommandArgument o ID...

    <asp:LinkButton ID="deleteButton" runat="server" CommandArgument='<%#Eval("Id")%>' CommandName="Apagar" Text="Apagar"
    OnClientClick="return confirm('Are you sure you want to delete this user?');" />

    Porém se vc ainda precisar de um tratamento específico recomendo que você coloque um Label com Visible=False, e preencha ele com o ID.

    Assim qq post que você fizer vc poderá varrer o Grid e localizar essa Label com o ID ok.

    Abs


    Att, Lucio Rogerio


    Espero ter ajudado, se ajudei, por favor Vote como Útil, e se resolvi seu problema, clique em Marcar como Resposta.

    • Marcado como Resposta Marcos SJ sexta-feira, 28 de agosto de 2015 15:46
    sexta-feira, 28 de agosto de 2015 01:47
  • Boa noite Lucio.

    Sua solução até me deu uma luz, pois agora estou usando este ItemTemplate e conseguindo trabalhar com o ClientClick e o OnClick. Show!

    porém, como eu faço agora para obter o id da linha que eu cliquei?

    Anteriormente era assim:

    var codigo = Convert.ToInt32(e.Values["idPet"]);

    Mas agora como estou usando o Onclick, só permite o uso de métodos que tem um parâmetro do tipo EventArgs e essa classe não possui a propriedae Values, tal como a GridViewDeleteEventArgs.

    Estamos quase lá, rsrs..

    Obrigado

    sexta-feira, 28 de agosto de 2015 00:42
  • Lucio, consegui!!!

    Dei mais uma fuçada procurando como mandar um valor do commandArgument para o codebehind e encontrei a solução:

     LinkButton btn = (LinkButton)(sender);
    string yourValue = btn.CommandArgument;

    Com um objeto do mesmo tipo que estou utilizando, passando o sender eu consigo obter o ID.

    Problema resolvido.

    Muito obrigado!

    quarta-feira, 9 de setembro de 2015 02:01

Todas as Respostas

  • Boa noite Lucio.

    Sua solução até me deu uma luz, pois agora estou usando este ItemTemplate e conseguindo trabalhar com o ClientClick e o OnClick. Show!

    porém, como eu faço agora para obter o id da linha que eu cliquei?

    Anteriormente era assim:

    var codigo = Convert.ToInt32(e.Values["idPet"]);

    Mas agora como estou usando o Onclick, só permite o uso de métodos que tem um parâmetro do tipo EventArgs e essa classe não possui a propriedae Values, tal como a GridViewDeleteEventArgs.

    Estamos quase lá, rsrs..

    Obrigado

    sexta-feira, 28 de agosto de 2015 00:42
  • Boa noite, Lucio. Eu entendi que agora é possível obter o id, mas agora minha dúvida é: como?

    Com essa solução, meu código ficou assim:

    protected void deleteButton_Click(object sender, EventArgs e)
            {
                var codigo = Convert.ToInt32(e.ToString());
                           
    
                oPetBus.DeletarPet(codigo);
                ListarPets();
    
    }

    Só que aí é que está: como obtenho o Id do CommandArgument para passar pra variável código? Esse é o único problema agora.

    Grato pela atenção.

    quarta-feira, 9 de setembro de 2015 01:28
  • Lucio, consegui!!!

    Dei mais uma fuçada procurando como mandar um valor do commandArgument para o codebehind e encontrei a solução:

     LinkButton btn = (LinkButton)(sender);
    string yourValue = btn.CommandArgument;

    Com um objeto do mesmo tipo que estou utilizando, passando o sender eu consigo obter o ID.

    Problema resolvido.

    Muito obrigado!

    quarta-feira, 9 de setembro de 2015 02:01