您的位置:程序门 -> .net技术 -> c#



对datagridview的更新、删除、插入操作的记录


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


对datagridview的更新、删除、插入操作的记录[已结贴,结贴人:fightback]
发表于:2007-03-22 15:34:17 楼主
通过以下对datagridview中的修改(删除、更新、插入)后的数据进行数据库更新
this.oledbdataadapter1.update(this.dataset1.tables[0].getchanges());
dataset1.tables[0].acceptchanges();


this.dataset1.tables[0].getchanges()返回更改后的dataset。
我想将更改后的dataset1后更改前的dataset1进行比较

得到对原dataset1的具体修改信息;
      比如对第2条记录的某字段,将值abc改为abcd
      对第三条记录进行了删除操作
      并插入了一条新的记录

用户对dataset1进行的三次操作通过三次调用自定义函数log(string   action)进行操作记录

或者是否能记录oledbdataadapter1的oledbinsertcommand1、oledbupdatecommand1、oledbdeletecommand1执行来判定作了何种操作?


发表于:2007-03-22 15:41:591楼 得分:40
不用这么麻烦,dataset对数据表的每一行的数据都记录的有状态,可以用其来解决你的问题,但前提是不能getchanges
发表于:2007-03-22 17:53:492楼 得分:10
sqldataadapter   adapter   =   new   sqldataadapter(sqlstr);
sqlcommandbuilder   cmdbuilder   =   new   sqlcommandbuilder(adapter);
if   (ds.haschanges())
{
adapter.update(ds,   tablename);
}
有这几句就可以批处理了
注意sqlstr必须是一个查询语句,并且必须要
发表于:2007-03-22 20:31:533楼 得分:0
更新函数
  foreach   (datarow   dr   in   dataset1.tables[0].rows)
                                {
                                        if   (dr.rowstate   ==   datarowstate.added)
                                        {
                                                class_trans_log.insert_trans_log(class_static.logon_user_name,   "质检员窗口 ",   "新增 ",   "成功   "   +   dr[0,   datarowversion.current].tostring()   +   "   的记录 ");
                                        }
                                        if   (dr.rowstate   ==   datarowstate.deleted)
                                        {
                                                class_trans_log.insert_trans_log(class_static.logon_user_name,   "质检员窗口 ",   "删除 ",   "成功   "   +   dr[0,   datarowversion.original].tostring()   +   "   的记录 ");
                                        }
                                        if   (dr.rowstate   ==   datarowstate.modified)
                                        {
                                                //foreach   (datacolumn   column   in   table.columns)
                                                //{
                                                //         console.writeline(dr[column]);
                                                //}
                                                        if   (dr[0,   datarowversion.current]   !=   dr[0,   datarowversion.original])  
                                                        {
                                                                class_trans_log.insert_trans_log(class_static.logon_user_name,   "质检员窗口 ",   "更新 ",   "成功   原   "   +   dr[0,   datarowversion.original].tostring()   +   "   改为   "   +   dr[0,   datarowversion.current].tostring()   +   "   的记录 ");
                                                        }
                                                       
                                        }

                                }
                                //将更改的数据更新到数据表里
                                this.oledbdataadapter1.update(this.dataset1.tables[0].getchanges());
                               
                                //添加序列号,dataset中有序列号,而表中无相应字段
                                add_num_seq();

                                //datatable接受更改,以便为下一次更改作准备
                                dataset1.tables[0].acceptchanges();

引用:
当对   dataset   调用   acceptchanges   时,任何仍处于编辑模式的   datarow   对象都将成功结束其编辑。每个   datarow   的   rowstate   属性也会更改;added   和   modified   行变为   unchanged,而   deleted   行则被移除。

对dataset1的序列号列调用add_num_seq()生成,调用的顺序调了很久

明日结帖


快速检索

最新资讯
热门点击