¿Cómo eliminar una fila en gridview usando el evento rowdeleting?

Este es mi código .cs :

 protected void Gridview1_RowDeleting(object sender, GridViewDeleteEventArgs e) { Gridview1.DeleteRow(e.RowIndex); Gridview1.DataBind(); } 

y esto es markup ,

         <%--     --%>    varchar int numeric uniqueidentifier char            Delete     

Por favor sugiérame He hecho esto mucho … pero aún no he eliminado la fila …

  protected void Gridview1_RowDeleting(object sender, GridViewDeleteEventArgs e) { //Gridview1.DeleteRow((int)Gridview1.DataKeys[e.RowIndex].Value); //Gridview1.DeleteRow(e.RowIndex); //Gridview1.DataBind(); foreach(DataRow dr in dt.Rows) { dt.Rows.Remove(dr); dt.Rows[e.RowIndex].Delete(); } Gridview1.DeleteRow(e.RowIndex); // dt = (DataTable)Gridview1.DataSource; Gridview1.DataSource = dt; Gridview1.DataBind(); } 

 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex]; SqlCommand cmd = new SqlCommand("Delete From userTable (userName,age,birthPLace)"); GridView1.DataBind(); } 

Asegúrese de crear un objeto DataTable estático y luego use el siguiente código:

 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { dt.Rows.RemoveAt(e.RowIndex); GridView1.DataSource = dt; GridView1.DataBind(); } 

Tu código de eliminación se ve así

 Gridview1.DeleteRow(e.RowIndex); Gridview1.DataBind(); 

Cuando llame a Gridview1.DataBind () rellenará su vista de cuadrícula con el origen de datos actual. Por lo tanto, eliminará todas las filas existentes y agregará todas las filas de CustomersSqlDataSource .

Lo que debe hacer es eliminar la fila de la tabla que consulta CustomersSqlDataSource.

Puede hacer esto muy fácilmente configurando un comando de eliminación en CustomersSqlDataSource, agregue un parámetro de eliminación y luego ejecute el comando de eliminación.

 CustomersSqlDataSource.DeleteCommand = "DELETE FROM Customer Where CustomerID=@CustomerID"; // Customer is the name of the table where you take your data from. Maybe you named it different CustomersSqlDataSource.DeleteParameters.Add("CustomerID", Gridview1.DataKeys[e.RowIndex].Values["CustomerID"].ToString()); CustomersSqlDataSource.Delete(); Gridview1.DataBind(); 

Pero tenga en cuenta que esto eliminará los datos de la base de datos.

La forma más fácil es crear su GridView con alguna fuente de datos en ASP y llamar a esa fuente de datos en el evento Row_Deletinng. Por ejemplo, si tiene SqlDataSource1 como fuente de datos GridView, su evento Row_Deleting sería:

 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { int ID = int.Parse(GridView1.Rows[e.RowIndex].FindControl("ID").toString()); string delete_command = "DELETE FROM your_table WHERE ID = " + ID; SqlDataSource1.DeleteCommand = delete_command; } 

Vea el siguiente código y realice algunos cambios para obtener la respuesta a su pregunta

 < %@ Page Language="C#" %> < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">    GridView RowDeleting Example   

GridView RowDeleting Example


En Grid usa este código que tiene ID como elemento principal para identificar de forma única cada fila de valores

      

y para buscar el identificador uique use el código en el código C # detrás (básicamente esto es buscar campo oculto y almacenarlo en var)

 protected void Grd_Registration_RowDeleting(object sender, GridViewDeleteEventArgs e) { var ID = (HiddenField)Grd_Registration.Rows[e.RowIndex].FindControl("ID"); //Your Delete Logic Goes here having ID to delete GridBind(); } 

La solución es algo simple; una vez que haya eliminado la fila de la cuadrícula de datos (su código SOLAMENTE quita la fila de la cuadrícula y NO la fuente de datos), entonces no necesita hacer nada más. Como está realizando una operación de enlace de datos inmediatamente después, sin actualizar el origen de datos, está volviendo a agregar todas las filas desde el origen al control gridview (incluida la fila eliminada de la cuadrícula en la statement anterior).

Para eliminar simplemente de la cuadrícula sin un origen de datos, simplemente llame a la operación de eliminación en la cuadrícula y eso es todo lo que necesita hacer … después de eso, no se necesita enlace de datos.

Pruebe esto Asegúrese de mencionar el nombre de la clave de datos que no es más que el nombre de la columna (id) en su archivo de diseñador

// tu código aspx

< asp:GridView ID=”dgUsers” runat=”server” AutoGenerateSelectButton=”True” OnDataBound=”dgUsers_DataBound” OnRowDataBound=”dgUsers_RowDataBound” OnSelectedIndexChanged=”dgUsers_SelectedIndexChanged” AutoGenerateDeleteButton=”True” OnRowDeleting=”dgUsers_RowDeleting” DataKeyNames=”id” OnRowCommand=”dgUsers_RowCommand”>

// Tu código aspx.cs

 protected void dgUsers_RowDeleting(object sender, GridViewDeleteEventArgs e) { int id = Convert.ToInt32(dgUsers.DataKeys[e.RowIndex].Value); string query = "delete from users where id= '" + id + "'"; //your remaining delete code } 

Creo que estás cometiendo el mismo error de volver a vincular lo mencionado en este enlace

¿Cómo eliminar una fila de gridview?

Si recuerdo de sus preguntas anteriores, está vinculando a una DataTable. Prueba esto:

 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { DataTable sourceData = (DataTable)GridView1.DataSource; sourceData.Rows[e.RowIndex].Delete(); GridVie1.DataSource = sourceData; GridView1.DataBind(); } 

Básicamente, como dije en mi comentario, tome una copia del DataSource de GridView, elimine la fila de la misma, luego establezca el DataSource en el objeto actualizado y vuelva a llamar a DataBind ().

Aquí hay un truco con lo que quieres lograr. También estaba teniendo problemas como tú.

Es difícil obtener la fila y la clave de datos seleccionadas en el evento RowDeleting. Sin embargo, es muy fácil obtener las filas y las teclas de datos seleccionadas en el evento SelectedIndexChanged. Aquí hay un ejemplo-

 protected void gv_SelectedIndexChanged(object sender, EventArgs e) { int index = gv.SelectedIndex; int vehicleId = Convert.ToInt32(gv.DataKeys[index].Value); SqlConnection con = new SqlConnection("-----"); SqlCommand com = new SqlCommand("DELETE FROM tbl WHERE vId = @vId", con); com.Parameters.AddWithValue("@vId", vehicleId); con.Open(); com.ExecuteNonQuery(); } 

Agregue la siguiente línea en la carga de página,

 ViewState["GetRecords"] = dt; 

entonces prueba esto,

 protected void DeleteRows(object sender, GridViewDeleteEventArgs e) { dt = ViewState["GetRecords"] as DataTable; dt.Rows.RemoveAt(e.RowIndex); dt.AcceptChanges(); ViewState["GetRecords"] = dt; BindData(); } 

Si aún tiene algún problema, envíe el código en el método BindData ()

  protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { int index = GridView1.SelectedIndex; int id = Convert.ToInt32(GridView1.DataKeys[index].Value); SqlConnection con = new SqlConnection(str); SqlCommand com = new SqlCommand("spDelete", con); com.Parameters.AddWithValue("@PatientId", id); con.Open(); com.ExecuteNonQuery(); 

El índice estaba fuera de rango. Debe ser no negativo y menor que el tamaño de la colección. Nombre del parámetro: índice

Sé que esta es una respuesta tardía, pero aún así ayudaría a alguien que necesita una solución. Recomiendo usar OnRowCommand para la operación de eliminación junto con DataKeyNames, mantenga la función OnRowDeleting para evitar excepciones.

  

Incluya DataKeyNames = “ID” en gridView y especifique lo mismo en el botón de enlace.

 Delete protected void Gridview1_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "Delete") { int ID = Convert.ToInt32(e.CommandArgument); //now perform the delete operation using ID value } } protected void Gridview1_RowDeleting(object sender, GridViewDeleteEventArgs e) { //Leave it blank } 

Si esto es útil, dame +

 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { MySqlCommand cmd; string id1 = GridView1.DataKeys[e.RowIndex].Value.ToString(); con.Open(); cmd = new MySqlCommand("delete from tableName where refno='" + id1 + "'", con); cmd.ExecuteNonQuery(); con.Close(); BindView(); } private void BindView() { GridView1.DataSource = ms.dTable("select * from table_name"); GridView1.DataBind(); } 
 //message box before deletion protected void grdEmployee_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { foreach (DataControlFieldCell cell in e.Row.Cells) { foreach (Control control in cell.Controls) { LinkButton button = control as LinkButton; if (button != null && button.CommandName == "Delete") button.OnClientClick = "if (!confirm('Are you sure " + "you want to delete this record?')) return false;"; } } } } //deletion protected void grdEmployee_RowDeleting(object sender, GridViewDeleteEventArgs e) { conn.Open(); int empid = Convert.ToInt32(((Label)grdEmployee.Rows[e.RowIndex].Cells[0].FindControl("lblIdBind")).Text); SqlCommand cmdDelete = new SqlCommand("Delete from employee_details where id=" + empid, conn); cmdDelete.ExecuteNonQuery(); conn.Close(); grdEmployee_refreshdata(); }