当前位置:编程学习 > C#/ASP.NET >>

DataGridView更新

使用DataGridView和数据库绑定,新增保存删除都没有问题
但是有点小意外,例如:
我在DataGridView写入两条数据,主键的值分别为1和2,保存到数据库成功。然后修改DataGridView,把刚才的主键为1的数据主键值改为2,2的改为1,保存,数据库返回错误说 主键重复。

数据绑定代码:
            OleDbDataAdapter myAdapter;
            DataSet myDataSet = new DataSet();
            con.Open();
            myAdapter = new OleDbDataAdapter(comd, con);
            myAdapter.Fill(myDataSet, "TableName");
            myDataGridView.DataSource = myDataSet.Tables["TableName"];
            con.Close();

保存部分代码:
            command = new OleDbCommand(sql, con);
            OleDbDataAdapter oda = new OleDbDataAdapter(command);
            OleDbCommandBuilder cmdblr = new OleDbCommandBuilder();
            cmdblr.DataAdapter = oda;
            DataTable dt = (DataTable)myDataGridView.DataSource;
            oda.Update(dt);

我试了把DataGridView重新按主键排序,没有解决问题。感觉是DataSource绑定产生的问题。

请各位帮忙看看问题出在哪,或者有什么办法避开这个问题。谢谢了。 --------------------编程问答-------------------- 手动更新,先删除,再插入。 --------------------编程问答-------------------- 你这个做法跟DataGridView是一点关系都没有,你把想1改成2,但是2已经被占用了啊,数据库肯定不让改的,你必须先,1改到3,2改到1,1改到2,3是一个没有被用掉的主键 --------------------编程问答-------------------- 2楼说的是
必须用一个没有用过的主键来过渡一下 --------------------编程问答-------------------- 就是你自己的错误啊!同意LS的看法! --------------------编程问答--------------------
引用 2 楼 yrj_star 的回复:
你这个做法跟DataGridView是一点关系都没有,你把想1改成2,但是2已经被占用了啊,数据库肯定不让改的,你必须先,1改到3,2改到1,1改到2,3是一个没有被用掉的主键

这个说的有道理,但是我现在的做法除了这种情况其他的数据库操作都不用我自己管。如此说来只有这种情况要我自己手动控制,是这个意思吧。但是这种情况有如何判断出来呢。 --------------------编程问答-------------------- 问题解决
dt.AcceptChanges();
共勉 --------------------编程问答-------------------- 你这个做法跟DataGridView是一点关系都没有,你把想1改成2,但是2已经被占用了啊,数据库肯定不让改的,你必须先,1改到3,2改到1,1改到2,3是一个没有被用掉的主键

补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,