如何使用rowdeleting事件删除gridview中的行?

这是我的.cs代码:

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

这是markup

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

请认真我。 我做了这么多..但仍然没有删除行…

  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(); } 

确保创建一个静态DataTable对象 ,然后使用以下代码:

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

您的删除代码如下所示

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

当您调用Gridview1.DataBind()时,您将使用当前数据源填充gridview。 因此,它将删除所有存在的行,并将添加CustomersSqlDataSource中的所有行。

您需要做的是从CustomersSqlDataSource查询的表中删除该行。

通过向CustomersSqlDataSource设置delete命令,添加删除参数,然后执行delete命令,可以非常轻松地完成此操作。

 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(); 

但请注意,这将从数据库中删除数据。

最简单的方法是使用ASP中的某些数据源创建GridView,并在Row_Deletinng Event中调用该数据源。 例如,如果您将SqlDataSource1作为GridView数据源,则Row_Deleting事件将为:

 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; } 

请参阅以下代码并进行一些更改以获得问题的答案

 <%@ Page Language="C#" %>     GridView RowDeleting Example   

GridView RowDeleting Example


在网格中使用此代码将ID作为主要元素,以便唯一标识每个ROW

      

并搜索uique ID使用后面的C#代码中的代码(基本上这是搜索隐藏字段并将其存储在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(); } 

解决方案有点简单; 一旦从数据网格中删除了该行(您的代码仅从网格中删除行而不是数据源),那么您不需要执行任何其他操作。 当您在不更新数据源之后立即执行数据绑定操作时,您将重新添加从源到gridview控件的所有行(包括从前一语句中的网格中删除的行)。

要简单地从没有数据源的网格中删除,只需在网格上调用删除操作,这就是你需要做的所有事情……之后不需要数据绑定。

试试这个确保你提到的Datakeyname只是设计器文件中的列名(id)

//你的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”>

//你的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 } 

我认为你在做这个链接中提到的重新绑定错误

如何从gridview中删除行?

如果我记得您之前的问题,那么您将绑定到DataTable。 试试这个:

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

基本上,正如我在评论中所说,获取GridView的DataSource副本,从中删除行,然后将DataSource设置为更新的对象并再次调用DataBind()。

这是你想要实现的诀窍。 我也有像你这样的问题。

在RowDeleting事件中很难获得选定的行和数据键但是在SelectedIndexChanged事件中很容易获得选定的行和数据键。 这是一个例子 –

 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(); } 

在页面加载中添加以下行,

 ViewState["GetRecords"] = dt; 

试试这个,

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

如果仍有任何问题,请使用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(); 

指数超出范围。 必须是非负数且小于集合的大小。 参数名称:index

我知道这是一个迟到的答案,但它仍然可以帮助需要解决方案的人。 我建议使用OnRowCommand进行删除操作以及DataKeyNames,保持OnRowDeleting函数以避免exception。

  

在gridView中包含DataKeyNames =“ID”,并在链接按钮中指定相同的内容。

 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 } 

如果这有用,请给我+

 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(); }