问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在VS2010中 用C#怎么把dataGridView中修改的数据同步到数据库中

发布网友 发布时间:2022-04-11 02:26

我来回答

2个回答

懂视网 时间:2022-04-11 06:48

 

 DataGridView控件是微软预先写好的一个显示数据的控件,功能非常强大,可以显示来自数据库表的数据和XML等其他来源的数据。

方法一:基于DataAdapter对象创建一个CommandBulider,用来生成Sql命令,修改数据源,从而直接更改数据表的内容。

  前提是:

    1.这个表必须有主键,否则该对象无法生成Update和delete、insert的Sql命令,报异常:

     对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。

    2.实例化SqlCommandBuilder对象的数据适配器对象SqlDataAdapter必须预先设置好SelectCommand属性

    3.更新的表中不能包括image类型的字段(列)

  由于出错的情况有很多,程序员无法完全掌握,所以我们强烈建议将更新代码写在try catch里

 下面是此方法的实例:

  

 

     /// <summary>

        /// 数据适配器

        /// </summary>

        SqlDataAdapter adapter = null;

        /// <summary>

        /// 数据集对象

        /// </summary>

        DataSet dSet = null;

 

        /// <summary>

        /// 连接字符串

        /// </summary>

        private static string strConn = "server=.\sqlexpress;database=MySchool;uid=sa;pwd=123456";

 

        /// <summary>

        /// 窗体加载事件

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void Form3_Load(object sender, EventArgs e)

        {

            adapter = new SqlDataAdapter("select * from UserInfo", strConn);

            dSet = new DataSet();

            adapter.Fill(dSet);

 

            DGVMain.DataSource = dSet.Tables[0];

        }

 

        /// <summary>

        /// 更新按钮点击事件

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void button1_Click(object sender, EventArgs e)

        {

            //创建命令重建对象

            SqlCommandBuilder scb = new SqlCommandBuilder(adapter);

 

            //更新数据

            try

            {
         //这里是关键

                adapter.Update(dSet);

            }

            catch (SqlException ex)

            {

                MessageBox.Show(ex.Message);

            }

 

        }

 

由于各种原因,性能问题,安全问题和其他复杂的因素。

主要缺点:

1、 基于单表,只能对一个数据源表进行更新,如果要更新数据库
中的已改变的表,则不能用它来更新了。 

2、 要求数据库中必须设置好主键字段 

3、 不能对存有图片的数据库进行增删改操作 

4、 执行起来,速度相对于非自动化慢(当然,是在数据库的规模
很大的情况下)

需要注意的地方:

1、 必须与DataAdapter结合使用 
2、 实例化SqlCommandBuilder对象前,必须先指定好数据适配器
的填充命令(SelectCommand)。 
3、 填充命令(Select 语句)中返回的列要包括主键列,否则将无
法产生Update,和Delete语句。 
4、  使用命令构建器比手动编写SQL更好,但是它们只能处理一个
表,底层的数据库表必须有主键或唯一键。另外,数据适配器的SelectCommand属性必须有一个包含主键的查询。

这种方法在实际项目中根本不会用到,一些小项目和初学者可以尝试。

 

 

第二种方法:定位被修改的单元格,获取列名和id,构建SQL然后,然后执行更新操作。

  这种方法比第一张方法复杂多,效果却是一样的,一般也不太会去用。这里简单介绍一下。思路是:点击单元格触发DGV的CellBeginEdit事件,在此事件中保存原先的值到成员字段中,然后在DGV的CellEndEdit事件中修改数据,执行更新。

  具体的代码:

  

 

#region DGV直接编辑修改数据的功能

        /// <summary>

        /// 用来存放DGV单元格修改之前值

        /// </summary>

        Object cellTempValue = null;

 

        /// <summary>

        /// DGV单元格开始编辑时触发的事件

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void DGVMain_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)

        {

            cellTempValue = DGVMain.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;

        }

 

        /// <summary>

        /// DGV单元格结束编辑时触发的事件

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void DGVMain_CellEndEdit(object sender, DataGridViewCellEventArgs e)

        {

            //判断编辑前后的值是否一样(是否修改了内容)

            if (Object.Equals(cellTempValue, DGVMain.Rows[e.RowIndex].Cells[e.ColumnIndex].Value))

            {

                //如果没有修改,则返回

                return;

            }

 

            //判断用户是否确定修改

            if (MessageBox.Show("确定修改?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.None) != DialogResult.OK)

            {

                //如果不修改,恢复原来的值

                DGVMain.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = cellTempValue;

                return;

            }

 

            //修改数据库的数据

            string sql = String.Format("update  set {1}=‘{2}‘ where 商品编号=‘{3}‘",

                DGVMain.Columns[0].DataPropertyName,            //所选单元格列名

                DGVMain.Rows[e.RowIndex].Cells[e.ColumnIndex].Value,    //所选单元格修改后的值

                DGVMain.Rows[e.RowIndex].Cells[0].Value                  //所选行的商品编号

            );

 

            try

            {

                OleDbHelper.ExecuteNonQuery(CommandType.Text, sql);

            }

            catch (OleDbException ex)

            {

                MessageBox.Show(ex.Message);

            }

 

            //刷新数据

            LoadDGV();

        }

        #endregion

 

 

个人建议的解决方案:做一个ContextMenu菜单,绑定DGV,菜单中有修改数据和删除数据,当用户选择整行后,点击右键选择修改信息,立即弹出一个窗口,根据该行的id重新从数据库中取出该行记录的所有值,赋值到各个文本框中,然后点击更新,执行更新操作。这是最最纯洁的方法。

 

分类: C#.Net

 

DataGridView编辑后立即更新到数据库的两种方法

标签:builder   tab   image   ref   有一个   内容   help   程序员   lan   

热心网友 时间:2022-04-11 03:56

将datagridview的数据源绑定到DataAdapter的fill方法指定的dataset,然后每次datagridview的cell编辑完成后update就可以同步到数据库中
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
单位高温防护欠缺致员工中暑如何对待 狗狗为什么爱看视频 360浏览器怎么设置倍速播放 ...先讲女主的灵魂飘荡了一段时间,然后重生,请问是那本? 拯救者散热器怎么开 电脑如何一键还原系统电脑一键还原怎么操作 神舟笔记本电脑怎么重新设置神舟战神bios恢复出厂设置 神舟电脑恢复出厂设置神舟战神怎么恢复原厂系统 水泥楼梯如何铺木楼梯 家里面楼梯是水泥的不想铺地毯或者地砖还能铺什么 求:《杜拉拉大结局-与理想有关》TXT完整版,注意不是那个到了14章就结束的版本。 求杜拉拉大结局:与理想有关 完整版 发邮箱714082081@qq.com 谢谢 求 杜拉拉大结局:与理想有关 txt 完整版! 求杜拉拉4大结局完整版.yrssry76@126.com 杜拉拉大结局电子书完整版! 是电视剧杜拉拉升职记的结局 杜拉拉升职记电视版结局是什么? 网上投简历哪些网站比较好? datagridview中,双击单元格之后处于编辑状态,此时输入新值,实现数据库的同步更新! 一般夜场男模喜欢什么类型的 夜场男模追我是真爱吗 我掉发啊,有什么好的办法啊? 打豆浆:核桃要泡吗 磨豆浆的核桃需要浸泡吗 榨汁机为什么榨出来的水果汁是苦的 什么是榨汁机? 如何介绍简历制作的背景与思路,诠释简历的风格和结构? 如何制作简历,如何才能提高面试率? 要毕业了,简历怎么做啊? 个人简历如何突出个人能力的写作思路? 怎么看紫微星盘? 紫微星盘怎么看?求助 星盘怎么看,拜托行家能不能给我解释一下?我是女,农历1987年4月6日零点左右,帮我算算怎样? 怎么看紫薇星盘 求看星盘! 电信客服电话查话费 dataGridView里面修改数据后,点击更新按钮,将填写好后的所有数据一次性全部更新数据库内容.请问该怎么做 怎么将datagridview中修改后的数据通过按钮点击直接保存到数据库啊? c#winform datagridview控件怎么在上面直接修改并且更新到sql数据库 海康威视16路解码器 出现字母 需要改摄像机分辨率 怎么改啊?急需回答 怎样将在datagridview中修改,添加,删除的数据一下更新到数据库 人大代表在什么情况下被罢免 取消人大代表需要多少时间 终止人民代表大会代表资格的条件是什么? 政协委员受处分要怎样的程序 第十一届人大代表资格什么时间终止 代表被开除党籍是否必须终止其代表资格 人大代表被撤是怎样的程序? 人大代表有哪些情形时,暂停执行代表职务 因违反廉洁纪律被留党察看是否需要终止人大代表资格?