Deleting a row completely from a dataset

2019-07-04 09:15发布

问题:

I have a remove button on my gridview. On Clicking the remove button , the row should be completely removed from the session. I am currently doing the following :

protected void gvMainLog_RowCommand(Object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Remove")
        {

            GridViewRow rowSelect = (GridViewRow)(((Button)e.CommandSource).NamingContainer);
            int rowindex = rowSelect.RowIndex;

            DataSet ds =  ((DataSet)Session["old"]);

            ds.Tables[0].Rows[rowindex].Delete();

            Session["old"] = ds;

            gvMainLog.DataSource = Session["old"];
            gvMainLog.DataBind();

        }

The problem is that :

ds.Tables[0].Rows[rowindex].Delete();

removes only the content in that row. When I look at the dataset , it shows an empty row.

Is there a way I can remove the entire row, without it showing an empty row ?

回答1:

Try calling

ds.AcceptChanges() 

after row.Delete().



回答2:

If you want to remove a single data row, RemoveAt is the easier option:

ds.Tables[0].Rows.RemoveAt(rowIndex);

Oscar's answer is also correct, according to the remarks for RemoveAt on MSDN:

When a row is removed, all data in that row is lost. You can also call the Delete method of the DataRow class to just mark a row for removal. Calling RemoveAt is the same as calling Delete and then calling AcceptChanges.