SqlDataAdapter的update方法的一个问题

SqlDataAdapter的update方法的一个问题update方法可以接收一个datatable参数然后去更新数据库的数据在C#窗体中弄一个dataGridView... SqlDataAdapter的update方法的一个问题
update方法可以接收一个datatable参数
然后去更新数据库的数据

在C#窗体中弄一个dataGridView1跟某个数据库的某个表绑在一起

这是原本的数据:

然后修改他们的内容 假设都改为 "测试一下啦":

关闭软件再次打开后发现是这个样子:

为什么只有第一行的数据没有被更改?
注意 我是设置为 点击一个按钮后 执行一些代码 把数据都改为"测试一下啦"
之后马上使用update方法 更新数据库的表
我又发现了一个问题 在点击那个更新按钮之前 我选中哪一行 哪一行的更新就无效!

foreach (DataGridViewRow i in dataGridView1.Rows) {
i.Cells[1].Value = "222";
i.Cells[2].Value = "222";
i.Cells[3].Value = "222";
}
this.bookTableAdapter.Update(this.scottDataSet.book);

上面这段代码是某个按钮被点击后执行的代码
展开
 我来答
烟花破
2013-07-07 · 超过52用户采纳过TA的回答
知道小有建树答主
回答量:233
采纳率:0%
帮助的人:75.3万
展开全部
把代码贴上来。应该是你代码里有问题
追问
我补充了 你再看看
追答
你是不是用了datagridview的datasource属性来绑定datatable?
如果是这样 你不在DataGridViewRow中修改,这样会有是否退出编辑状态的问题,这个问题要具体分析代码。你可以直接修改datatable 这样简单,可以实现一样的目的:
for(int i=0;i<datatalbe.Rows.Count;i++)
{
datatable.Rows[i][1]="222";

datatable.Rows[i][2]="222";
datatable.Rows[i][3]="222";
}

//帮你找到问题所在了。
用上面修改datatalbe的方式是没有问题的,如果你还是要用修改datagridview的方式 就会存在datarow 的行状态问题。如果行状态为Unchanged.未知 则update是无法将这行的数据提交到数据库的。你的这个问题在于,你是将datatable 绑定到了datagirdview,这样一来 如果在datagridview中某行被选中,则会触发内部事件造成datatable中相应的数据行的状态被置为Unchanged,所以无论你在update前选择了哪行,被选中的那行总是不能被update到数据库的!(这里的原因可能是:当datagridview与datatable绑定的时候,编译器会认为datagridview中被选中的行是用户正要编辑的行,所以会触发事件将datatable中相应的行的状态RowState置为Unchanged,你一但选择了其它行,那么编译器就会自动通过事件事判断这行是否被用户修改过了,如果修改过则RowState被置为Modify,这时才会被update到数据库中。)

知道了问题所在,就有办法来解决:

for (int i = 0; i < dt.Rows.Count; i++)
{
dt.Rows[i].EndEdit();
}
这样就没有问题了。

这个问题可能是微软的一个小BUG。
huangdayi02
2013-07-07 · TA获得超过114个赞
知道小有建树答主
回答量:205
采纳率:0%
帮助的人:217万
展开全部
Cells[0]呢?貌似您没有修改Cells[0]吧……这下标是从1开始的么?由于具体代码不清楚,我只能看出这里可能有情况。
追问
cells[0]是bookid列 是主键 当然不能改咯~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式