c# datagridview 中选择了数据源 如何更改数据源的内容

时间:2021-05-05 11:40:57
    如题, 在datagridview中, 已经选择了数据源,在界面的Load中有:
       // TODO: 这行代码将数据加载到表“waterMeterDataDataSet.InspectFactory”中。您可以根据需要移动或移除它。
            this.inspectFactoryTableAdapter.Fill(this.waterMeterDataDataSet.InspectFactory)
 问题是,如果在datagridview中,修改了数据(不是添加)后,希望 点击按钮,该数据库的内容也同时修改。应该如何实现?
     求高人指点, 在线等待!!!

25 个解决方案

#1


另外,该数据库 没主键

#2


跪求啊! 怎么没人呢

#3


重新绑定一次列表呀~

#4


引用 3 楼 xiaocai5a2 的回复:
重新绑定一次列表呀~

 只是在datagrideview中 修改了, 似乎没有改变列表吧?

#5


你就写个语句啊。。
先用if判断是否修改了数据,如果改了就用update 修改下并绑定保存到数据库中啊。。

#6


引用 5 楼 yang1605 的回复:
你就写个语句啊。。
先用if判断是否修改了数据,如果改了就用update 修改下并绑定保存到数据库中啊。。

   这思路我也是有的。,,。 可是我不知道代码怎么写。,, 求牛人 给一个小列子!

#7


难道没人会么?

#8


最直接的办法
1.如果你是用一个按钮来完成所有数据的更改.就将数据全删除了.再将datagridview的数据全部添加到数据库中.
2.如果你是一行一个按钮用来添加和更新那就好说了.通过点击这行获取到当前的行号将数据源中当前行的旧数据删除,读取当前新行的数据(你的数据源是DataTabel),你没有主键是个麻烦事.不能直接通过主键删除或更改数据.

#9


this.userDataSet.AcceptChanges()

#10


晕了,获取当前行,不过先结束编辑,然后直接保存当前行到数据库当中,代码不会写,聊我就行了
,我写给你

#11


this.inspectFactoryTableAdapter.Update(this.waterMeterDataDataSet.InspectFactory);
this.waterMeterDataDataSet.AcceptChanges();

#12


数据库没有主键?那有标识列吧?就是不能修改的,唯一标识
如果有唯一标识,我说一个方法,假设你的修改按钮只有一个,一下可以修改dgv的N行,然后点修改按钮


           //dt是datagridview的数据源
           for (int i = 0; i < dt.Rows.Count; i++)
                {
                    if (dt.Rows[i].RowState == DataRowState.Modified)
                    {
                        //TODO:数据库修改代码省略
                           ...........根据唯一标识修改..............
                           //提交
                        dt.Rows[i].AcceptChanges();
                    }
                }

#13


引用 11 楼 cxs861226 的回复:
C# code
this.inspectFactoryTableAdapter.Update(this.waterMeterDataDataSet.InspectFactory);
this.waterMeterDataDataSet.AcceptChanges();

你好, 引用你的方法,运行是会报错:“其他信息: 当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand。”

#14


引用 12 楼 scm_2008 的回复:
数据库没有主键?那有标识列吧?就是不能修改的,唯一标识
如果有唯一标识,我说一个方法,假设你的修改按钮只有一个,一下可以修改dgv的N行,然后点修改按钮


C# code

           //dt是datagridview的数据源
           for (int i = 0; i < dt.Rows.Count; i++)
                {
 ……

你好,你的方法很实在。 可是,我是需要在dataGridview中,修改所有数据后,在一个btn中完成数据的写入。这个可能就没有标识。 有没有,不需要标识的呢?

#15


没有唯一标识啊?
依我看来,那你表设计不合理。建议还是加上主键,否则很难办。

Update方法道理是一样的,你需要指定UpdateCommand,你连唯一标识都没有,如何Update?

#16


http://topic.csdn.net/u/20110105/15/10fac19e-ced1-41f8-a969-4c4923aac3b8.html

#17


http://topic.csdn.net/u/20110111/15/61eee9b2-7475-4875-8fe5-2ea0d0767db9.html
这个是我以前发过的贴,我想你应该适用.

#18


还有,你不加主键,会造成冗余数据,会有很多重复的,完全一样的数据存在。

#19


引用 15 楼 scm_2008 的回复:
没有唯一标识啊?
依我看来,那你表设计不合理。建议还是加上主键,否则很难办。

Update方法道理是一样的,你需要指定UpdateCommand,你连唯一标识都没有,如何Update?

是的, 一开始设置的时候 就没有想到要索引,结果就悲剧了。 现在还能设定某列为索引么?

#20


扬乐,提到的SqlCommandBuilder在这也不适用。
SqlCommandBuilder虽然会自动生成更新、修改、删除的sql语句,进行更新。
可是
当表中没有主键时,自动生成的SQL语句进行UPDate时,会出现异常信息。

  异常信息为:用SqlCommandBuilder更新DataSet,遇到“对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成”问题。

参见: http://blog.csdn.net/sunjiakai/article/details/4090051

#21


引用 19 楼 yfc260 的回复:
引用 15 楼 scm_2008 的回复:
没有唯一标识啊?
依我看来,那你表设计不合理。建议还是加上主键,否则很难办。

Update方法道理是一样的,你需要指定UpdateCommand,你连唯一标识都没有,如何Update?

是的, 一开始设置的时候 就没有想到要索引,结果就悲剧了。 现在还能设定某列为索引么?


当然可以!祝你好运!

#22


晕死了

#23


引用 21 楼 scm_2008 的回复:
引用 19 楼 yfc260 的回复:
引用 15 楼 scm_2008 的回复:
没有唯一标识啊?
依我看来,那你表设计不合理。建议还是加上主键,否则很难办。

Update方法道理是一样的,你需要指定UpdateCommand,你连唯一标识都没有,如何Update?

是的, 一开始设置的时候 就没有想到要索引,结果就悲剧了。 现在还能设定某列为索引么?


当然可以!祝你……

我在vs2008 中打开数据库,额。,,。,不知道怎么设定主键。,,仅能 看到了:列名,数据类型,允许null?

#24


只有 int类型的才能当主键啊!

#25


vs2008 中打开数据库?
为什么不在数据库中打开呢?
不是只有int类型的才能当主键。只有没有重复数据出现都可以。
你添加一个自增列吧。
建一个新表,表结构比原表多一列主键(自增),把原表数据Insert新表,删掉原表,把新表改名就OK了

#1


另外,该数据库 没主键

#2


跪求啊! 怎么没人呢

#3


重新绑定一次列表呀~

#4


引用 3 楼 xiaocai5a2 的回复:
重新绑定一次列表呀~

 只是在datagrideview中 修改了, 似乎没有改变列表吧?

#5


你就写个语句啊。。
先用if判断是否修改了数据,如果改了就用update 修改下并绑定保存到数据库中啊。。

#6


引用 5 楼 yang1605 的回复:
你就写个语句啊。。
先用if判断是否修改了数据,如果改了就用update 修改下并绑定保存到数据库中啊。。

   这思路我也是有的。,,。 可是我不知道代码怎么写。,, 求牛人 给一个小列子!

#7


难道没人会么?

#8


最直接的办法
1.如果你是用一个按钮来完成所有数据的更改.就将数据全删除了.再将datagridview的数据全部添加到数据库中.
2.如果你是一行一个按钮用来添加和更新那就好说了.通过点击这行获取到当前的行号将数据源中当前行的旧数据删除,读取当前新行的数据(你的数据源是DataTabel),你没有主键是个麻烦事.不能直接通过主键删除或更改数据.

#9


this.userDataSet.AcceptChanges()

#10


晕了,获取当前行,不过先结束编辑,然后直接保存当前行到数据库当中,代码不会写,聊我就行了
,我写给你

#11


this.inspectFactoryTableAdapter.Update(this.waterMeterDataDataSet.InspectFactory);
this.waterMeterDataDataSet.AcceptChanges();

#12


数据库没有主键?那有标识列吧?就是不能修改的,唯一标识
如果有唯一标识,我说一个方法,假设你的修改按钮只有一个,一下可以修改dgv的N行,然后点修改按钮


           //dt是datagridview的数据源
           for (int i = 0; i < dt.Rows.Count; i++)
                {
                    if (dt.Rows[i].RowState == DataRowState.Modified)
                    {
                        //TODO:数据库修改代码省略
                           ...........根据唯一标识修改..............
                           //提交
                        dt.Rows[i].AcceptChanges();
                    }
                }

#13


引用 11 楼 cxs861226 的回复:
C# code
this.inspectFactoryTableAdapter.Update(this.waterMeterDataDataSet.InspectFactory);
this.waterMeterDataDataSet.AcceptChanges();

你好, 引用你的方法,运行是会报错:“其他信息: 当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand。”

#14


引用 12 楼 scm_2008 的回复:
数据库没有主键?那有标识列吧?就是不能修改的,唯一标识
如果有唯一标识,我说一个方法,假设你的修改按钮只有一个,一下可以修改dgv的N行,然后点修改按钮


C# code

           //dt是datagridview的数据源
           for (int i = 0; i < dt.Rows.Count; i++)
                {
 ……

你好,你的方法很实在。 可是,我是需要在dataGridview中,修改所有数据后,在一个btn中完成数据的写入。这个可能就没有标识。 有没有,不需要标识的呢?

#15


没有唯一标识啊?
依我看来,那你表设计不合理。建议还是加上主键,否则很难办。

Update方法道理是一样的,你需要指定UpdateCommand,你连唯一标识都没有,如何Update?

#16


http://topic.csdn.net/u/20110105/15/10fac19e-ced1-41f8-a969-4c4923aac3b8.html

#17


http://topic.csdn.net/u/20110111/15/61eee9b2-7475-4875-8fe5-2ea0d0767db9.html
这个是我以前发过的贴,我想你应该适用.

#18


还有,你不加主键,会造成冗余数据,会有很多重复的,完全一样的数据存在。

#19


引用 15 楼 scm_2008 的回复:
没有唯一标识啊?
依我看来,那你表设计不合理。建议还是加上主键,否则很难办。

Update方法道理是一样的,你需要指定UpdateCommand,你连唯一标识都没有,如何Update?

是的, 一开始设置的时候 就没有想到要索引,结果就悲剧了。 现在还能设定某列为索引么?

#20


扬乐,提到的SqlCommandBuilder在这也不适用。
SqlCommandBuilder虽然会自动生成更新、修改、删除的sql语句,进行更新。
可是
当表中没有主键时,自动生成的SQL语句进行UPDate时,会出现异常信息。

  异常信息为:用SqlCommandBuilder更新DataSet,遇到“对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成”问题。

参见: http://blog.csdn.net/sunjiakai/article/details/4090051

#21


引用 19 楼 yfc260 的回复:
引用 15 楼 scm_2008 的回复:
没有唯一标识啊?
依我看来,那你表设计不合理。建议还是加上主键,否则很难办。

Update方法道理是一样的,你需要指定UpdateCommand,你连唯一标识都没有,如何Update?

是的, 一开始设置的时候 就没有想到要索引,结果就悲剧了。 现在还能设定某列为索引么?


当然可以!祝你好运!

#22


晕死了

#23


引用 21 楼 scm_2008 的回复:
引用 19 楼 yfc260 的回复:
引用 15 楼 scm_2008 的回复:
没有唯一标识啊?
依我看来,那你表设计不合理。建议还是加上主键,否则很难办。

Update方法道理是一样的,你需要指定UpdateCommand,你连唯一标识都没有,如何Update?

是的, 一开始设置的时候 就没有想到要索引,结果就悲剧了。 现在还能设定某列为索引么?


当然可以!祝你……

我在vs2008 中打开数据库,额。,,。,不知道怎么设定主键。,,仅能 看到了:列名,数据类型,允许null?

#24


只有 int类型的才能当主键啊!

#25


vs2008 中打开数据库?
为什么不在数据库中打开呢?
不是只有int类型的才能当主键。只有没有重复数据出现都可以。
你添加一个自增列吧。
建一个新表,表结构比原表多一列主键(自增),把原表数据Insert新表,删掉原表,把新表改名就OK了