none
Eliminar fila de grdview RRS feed

  • Pregunta

  • Amigos buenas noches , estoy tratando de eliminar la fila de un grid , por medio de un boton que esta en la columna elimiar ,  este grid lo cargo con lista  , pero el metodo que estoy utilizando para eliminar la fila no me funciona , este el codigo q estoy utilizando

    en el aspx tengo

       <asp:CommandField ShowDeleteButton="True" ButtonType="Button" />

     en el codebind lo siguiente 

       protected void Unnamed1_RowDataBound(object sender, GridViewRowEventArgs e)
            {


                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                  
                    string Codigo = e.Row.Cells[0].Text;
                    foreach (Button button in e.Row.Cells[11].Controls.OfType<Button>())
                    {
                        if (button.CommandName == "Delete")
                        {
                            button.Attributes["onclick"] = "if(!confirm('Desea eliminar el registro numero: " + Codigo + "?')){ return false; };";


                        }
                    }
                }
            }

     y en el evento Rowdeleting tengo lo sienguien , aca intento cargar los datos que hay en  grid  igualando la key de session a un datatable  pero   cuando ejecuto el evento me salta error , este es mi codigo.

      protected void dgvRemision_RowDeleting(object sender, GridViewDeleteEventArgs e)
            {
                int index = Convert.ToInt32(e.RowIndex);
                DataTable dt= Session["Productos"] as DataTable; esta session es la que tengo en el boton agregar 
                dt.Rows[index].Delete(); aca me salta el error, System.NullReferenceException: 'Referencia a objeto no establecida como instancia de un objeto.'dt fue null.
                dgvRemision.DataSource = Session["Productos"];
                DataBind();
            }


    Daniel

    martes, 14 de abril de 2020 3:31

Respuestas

  • Amigos ya logre realizar la eliminacion de la fila , comparto mi codigo por si alguien lo llega a necesitar 

    protected void dgvRemision_RowDeleting(object sender, GridViewDeleteEventArgs e)
            {

                GridViewRow row = dgvRemision.Rows[e.RowIndex];

                string Codigo = Convert.ToString(row.Cells[0].Text);
                string Referencia = Convert.ToString(row.Cells[1].Text);

                List<Productos> Lista = (List<Productos>)Session["Producto"];
              
                Lista.RemoveAt(e.RowIndex);
                dgvRemision.DataSource = Lista;
                dgvRemision.DataBind();
            }


    Daniel

    • Marcado como respuesta Dannycv012 miércoles, 15 de abril de 2020 15:26
    miércoles, 15 de abril de 2020 15:26

Todas las respuestas

  • hola

    Es de pura casualidad si el RowIndex del GridView coincide con los Index de las rows del DataTable, aplicar esa logica es incorrecta

    Deberias tomar una key o codigo de la entidad definida en el DataKeyNames con la ayuda del DataKeys para luego buscar esa row que concida en el datatable

    pero es una busqueda por un key unica del registro, no por los index

    >>System.NullReferenceException: 'Referencia a objeto no establecida como instancia de un objeto.'dt fue null.

    en que momento asignas el DataTable en la Session ? porque el error esta mas que claro no estas poniendo el objeto corecto

    puede que hayas asignado un DataSet y no un DataTable por es al castear no pueda hacerlo dejandote el null

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 14 de abril de 2020 15:29
  • Leandro buenas tardes , decidí cambiar la forma de realizar esta operación  utilizando el siguiente código  , este me funciona bien cuando son pocas filas , pero resulta que  si yo vuelvo a agregar una fila mas aparece la  que ya había eliminado, y cuando agrego un grupo el cual trae varias filas tampoco me deja eliminar ,  comparto el código que tengo. 

    Referencia es la posición 1 en la grid  ya que la posición cero es el código y este me diferencia entre una unidad o un grupo si el código  es de un grupo este tiene varias referencia espero me entiendas.

     private void RemoverFila(string Referencia)
            {
                var listas = Session["Producto"] as List<Productos>;
                listas = lista.Where(x => x.Referencia != Referencia).ToList();
                //Session["Producto"] = listas;
                dgvRemision.DataSource = listas;
                dgvRemision.DataBind();
            }

            protected void btnEliminar_Click(object sender, EventArgs e)
            {
                foreach (GridViewRow row in dgvRemision.Rows)
                {
                    string Referencia = row.Cells[1].Text;
                    RemoverFila(Referencia);
                    //Session.Remove(Session["Producto"].ToString());
                }

            }

    Daniel

    martes, 14 de abril de 2020 20:33
  • Amigos ya logre realizar la eliminacion de la fila , comparto mi codigo por si alguien lo llega a necesitar 

    protected void dgvRemision_RowDeleting(object sender, GridViewDeleteEventArgs e)
            {

                GridViewRow row = dgvRemision.Rows[e.RowIndex];

                string Codigo = Convert.ToString(row.Cells[0].Text);
                string Referencia = Convert.ToString(row.Cells[1].Text);

                List<Productos> Lista = (List<Productos>)Session["Producto"];
              
                Lista.RemoveAt(e.RowIndex);
                dgvRemision.DataSource = Lista;
                dgvRemision.DataBind();
            }


    Daniel

    • Marcado como respuesta Dannycv012 miércoles, 15 de abril de 2020 15:26
    miércoles, 15 de abril de 2020 15:26