千家信息网

怎么用DataTable的AcceptChanges()和RejectChanges()方法实现DataGridView数据增、删、改

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要讲解了"怎么用DataTable的AcceptChanges()和RejectChanges()方法实现DataGridView数据增、删、改",文中的讲解内容简单清晰,易于学习与理解,下
千家信息网最后更新 2026年11月03日怎么用DataTable的AcceptChanges()和RejectChanges()方法实现DataGridView数据增、删、改

这篇文章主要讲解了"怎么用DataTable的AcceptChanges()和RejectChanges()方法实现DataGridView数据增、删、改",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么用DataTable的AcceptChanges()和RejectChanges()方法实现DataGridView数据增、删、改"吧!

一、DataTable.AcceptChanges()方法

提交自上次调用AcceptChanges()方法以来对该表进行的所有更改。调用AcceptChanges()时,任何扔处于编辑模式的DataRow对象将成功结束其编辑。DataRowState也会随之更改:所有状态为Added何Modified的行的状态都变为Unchanged;状态为Deleted的行则被移除。

在尝试使用DbDataAdapter.Update方法更新DataSet之后,通常会对DataTable调用AcceptChanges方法。

二、DataTable.RejectChanges()方法

回滚自该表加载以来或上次调用AcceptChanges()以来对该表进行的所有更改。调用RejectChanges时,任何扔处于编辑模式的DataRow对象将取消其编辑。新行被移除。DataRowState设置为Modified或Deleted的行返回到其初始状态。

使用Delete()方法后,RowState变成"Deleted"状态。在您调用AcceptChanges之前,它一直保持"Deleted"状态。可通过调用RejectChanges取消删除行。

用于从DataTable对象中删除DataRow对象的方法有两种:DataRowCollection对象的Remove()方法和DataRow对象的Delete()方法。Rwmove()方法从DataRowCollection中删除DataRow,而Delete()方法只是将行的状态标记为删除,当应用程序调用AcceptChanges()方法时,才会发生实际的删除。通过使用Delete()方法,您可以在实际删除之前先以编程的方式检查哪些行标记为删除。

在将 DataSet 或 DataTable 与 DataAdapter 和关系型数据源一起使用时,用 DataRow 的 Delete 方法移除行。Delete 方法只是在 DataSet 或 DataTable 中将行标记为 Deleted,而不会移除它。而 DataAdapter 在遇到标记为 Deleted 的行时,会执行其 DeleteCommand 方法以在数据源中删除该行。然后,就可以用 AcceptChanges 方法永久移除该行。如果使用 Remove 删除该行,则该行将从表中完全移除,但 DataAdapter 不会在数据源中删除该行。

三、项目示例

1、界面设计

2、代码实现

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.Data;using System.Data.SqlClient;using System.Configuration;namespace DataRowStateDemo{    public partial class FrmMain : Form    {        public FrmMain()        {            InitializeComponent();        }        //连接字符串        string strConn = ConfigurationManager.ConnectionStrings["DbConn"].ConnectionString;        ///         /// 加载        ///         ///         ///         private void btn_LoadData_Click(object sender, EventArgs e)        {            Initdgv();            this.btn_Add.Visible = false;        }        ///         /// 初始化DataGridView        ///         private void Initdgv()        {            SqlConnection conn = new SqlConnection(strConn);            string strSQL = "select * from Users";            SqlCommand cmd = new SqlCommand(strSQL, conn);            SqlDataAdapter adapter = new SqlDataAdapter(cmd);            DataSet dsDgv = new System.Data.DataSet();            try            {                conn.Open();                //填充数据                adapter.Fill(dsDgv);                this.dgv_Demo.DataSource = dsDgv.Tables[0];                //不显示最后的空行                this.dgv_Demo.AllowUserToAddRows = false;                // 设置第一列只读                this.dgv_Demo.Columns[0].ReadOnly = true;            }            catch (Exception ex)            { }            finally            {                conn.Close();            }        }        ///         /// 编辑        ///         ///         ///         private void btn_Edit_Click(object sender, EventArgs e)        {            this.dgv_Demo.AllowUserToAddRows = true;        }        ///         /// 保存        ///         ///         ///         private void btn_Save_Click(object sender, EventArgs e)        {            DataTable dtCopy = this.dgv_Demo.DataSource as DataTable;            DataSet dsUsers = new DataSet();            //产生与表Users结构相同的空表            DataTable dtAdd = GetEmptyTable();            DataTable dtEdit = GetEmptyTable();            DataTable dtDel = GetEmptyTable();            //根据DataRowState的状态获取新增、修改、删除的表数据            dtAdd = dtCopy.GetChanges(DataRowState.Added);            dtEdit = dtCopy.GetChanges(DataRowState.Modified);            dtDel = dtCopy.GetChanges(DataRowState.Deleted);            //新增            if (dtAdd != null)            {                dtAdd.TableName = "Added";                dsUsers.Tables.Add(dtAdd);            }            //修改            if (dtEdit != null)            {                dtEdit.TableName = "Edit";                dsUsers.Tables.Add(dtEdit);            }            //删除            if (dtDel != null)            {                dtDel.TableName = "Del";                dtDel.RejectChanges();                dsUsers.Tables.Add(dtDel);            }            //保存数据            if (SaveUser(dsUsers))            {                MessageBox.Show("保存成功!");                //重新加载数据                Initdgv();            }            else            {                MessageBox.Show("保存失败!");            }        }        ///         /// 根据表结构产生空表        ///         ///         private DataTable GetEmptyTable()        {            DataTable dtTable = new DataTable("Users");            //使用集合初始化器添加列            dtTable.Columns.AddRange(new DataColumn[]{                   new DataColumn("UserID",typeof(Int32)),                   new DataColumn("UserName",typeof(string)),                   new DataColumn("Password",typeof(string)),                   new DataColumn("Sex",typeof(Char)),                   new DataColumn("Birthday",typeof(DateTime))            });            return dtTable;        }        ///         /// 保存数据        ///         ///         ///         private bool SaveUser(DataSet ds)        {            bool tf = false;            //新增            if (ds.Tables["Added"] != null)            {                foreach (DataRow dr in ds.Tables["Added"].Rows)                {                   tf= InsertUser(dr);                }            }            //修改            if (ds.Tables["Edit"] != null)            {                foreach (DataRow dr in ds.Tables["Edit"].Rows)                {                    tf = UpdateUser(dr);                }            }            //删除            if (ds.Tables["Del"] != null)            {                foreach (DataRow dr in ds.Tables["Del"].Rows)                {                    tf = DeleteUser(dr);                }            }            return tf;        }        ///         /// 数据库增加        ///         ///         ///         private bool InsertUser(DataRow drDataRow)        {            string strSQL = string.Format(@"insert into users values('{0}','{1}','{2}','{3}')", drDataRow["UserName"].ToString(), drDataRow["Password"].ToString(),                                                 drDataRow["Sex"].ToString(), drDataRow["Birthday"].ToString());            return ExecuteSQL(strSQL);        }        ///         /// 数据库删除        ///         ///         ///         private bool DeleteUser(DataRow drDataRow)        {            string strSQL = string.Format("delete from users where UserID='{0}'", Convert.ToInt32(drDataRow["UserID"].ToString()));            return ExecuteSQL(strSQL);        }        ///         /// 数据库修改        ///         ///         ///         private bool UpdateUser(DataRow drDataRow)        {            string strSQL = string.Format("update users set UserName='{0}',Password='{1}',Sex='{2}',Birthday='{3}' where UserID='{4}'",                                         drDataRow["UserName"].ToString(), drDataRow["Password"].ToString(), drDataRow["Sex"].ToString(),                                         drDataRow["Birthday"].ToString(), Convert.ToInt32(drDataRow["UserID"].ToString()));            return ExecuteSQL(strSQL);        }         ///          /// 数据库执行SQL语句         ///          ///          ///         private bool ExecuteSQL(string strSQL)        {            bool tfResult = false;            SqlConnection conn = new SqlConnection(strConn);            SqlCommand cmd = new SqlCommand(strSQL, conn);            try            {                conn.Open();                tfResult= cmd.ExecuteNonQuery().Equals(1);            }            catch (Exception ex)            { }            finally            {                conn.Close();            }            return tfResult;        }        ///         /// 删除        ///         ///         ///         private void btn_Del_Click(object sender, EventArgs e)        {            if (this.dgv_Demo.SelectedRows.Count <= 0)            {                MessageBox.Show("请先选择要删除的行");            }            else            {                foreach(DataGridViewRow dr in this.dgv_Demo.SelectedRows)                {                    //只是删除DataGridView中显示的数据,并没有删除数据库中的数据                    this.dgv_Demo.Rows.Remove(dr);                }            }        }        ///         /// 增加空行        ///         ///         ///         private void btn_Add_Click(object sender, EventArgs e)        {            //DataGridView没有绑定数据时才可以使用Add()方法增加空行            this.dgv_Demo.Rows.Add();        }        private void FrmMain_Load(object sender, EventArgs e)        {            this.dgv_Demo.AllowUserToAddRows = false;        }    }}

感谢各位的阅读,以上就是"怎么用DataTable的AcceptChanges()和RejectChanges()方法实现DataGridView数据增、删、改"的内容了,经过本文的学习后,相信大家对怎么用DataTable的AcceptChanges()和RejectChanges()方法实现DataGridView数据增、删、改这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

方法 数据 状态 对象 数据库 标记 只是 数据源 空行 学习 成功 内容 实际 模式 结构 相同 中将 代码 字符 字符串 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技产业 深圳科技互联网 互联网络科技有限公司 深圳互联网络科技有限公司 猪兼强互联网科技 奇酷互联网科技 伴你行互联网科技有限公司 滨湖区互联网智能科技产品供应 卫星互联网科技股票 科技赋能互联网健康 深圳前海聚择互联网科技有限公司 央行互联网金融科技公司 杭州壁岐互联网科技有限公司 东莞新华互联网科技学校 用友工业互联网科技发展 卓翼科技产业互联网合作 富国互联网金融科技混合基金 2021世界互联网领先科技成果发布 九思连强互联网电子科技有限公司 众联互联网络科技 金融科技和互联网金融 安控科技rtu产品工业互联网 互联网科技公司需要的职位 互联网科技产业特征 恒生互联网科技指数跳水 天津腾达互联网科技有限公司 徐州市互联网科技有限公司 美国互联网科技实力 互联网科技机房 众联互联网络科技
0