绑定DataTable的Datagridview如何更新

.Net技术 码拜 10年前 (2015-02-25) 1987次浏览 0个评论
          using (OleDbConnection cCon = new OleDbConnection(con))
          {
            OleDbDataAdapter ada = new OleDbDataAdapter(string.Format(@"select * from [{0}]", mySet), cCon);
            OleDbCommandBuilder cBu = new OleDbCommandBuilder(ada);
            try
            {
              ada.Update(dt);
              dt.AcceptChanges();
              MessageBox.Show("数据保存完成!");
              this.NavigatorSave.Enabled = false;
            }
            catch { MessageBox.Show("数据保存失败!"); }
          }

我想请问的是这个更新过程是什么原理?更新的过程是什么样的?
上面使用的是查询语句是单个表

string.Format(@"select * from [{0}]", mySet)

如果我使用的是多个表查询的语句

string.Format(@"select * from [{0}] inner join [{1}] on {0}.ID={1}.{0}ID",Table1,Table2)

是不是相同的更新过程呢?

 
绑定DataTable的Datagridview如何更新
绑定了datatable(后台数据源)之后,数据源里的数据变化,表格里的数据就会跟着变化
前提是,datatable是引用类型,不要重新new,重新new过的dt就跟绑定表格的那个没有任何关系了
绑定DataTable的Datagridview如何更新
如果你的代码里不得不重新new datatable(比如使用的数据库操作类就是返回一个新的datatable而不是更新现有的),那么你需要将新的datatable重新绑定到控件,控件就更新了
绑定DataTable的Datagridview如何更新
引用 2 楼 Z65443344 的回复:

如果你的代码里不得不重新new datatable(比如使用的数据库操作类就是返回一个新的datatable而不是更新现有的),那么你需要将新的datatable重新绑定到控件,控件就更新了

你说的有点让我头晕,刚开始用这个控件,感觉好多都不明白,总觉得有比Listview更快捷的方式但是又不会。上面少了这么一句

DataTable dt = this.dataGridView.DataSource as DataTable;

你看能不能给

绑定DataTable的Datagridview如何更新
自己试一下呗
既然单表查询好使了,多表查询有什么区别吗
如果不好使再纠结为什么
绑定DataTable的Datagridview如何更新
引用 4 楼 Z65443344 的回复:

自己试一下呗
既然单表查询好使了,多表查询有什么区别吗
如果不好使再纠结为什么

今天试了发现异常Dynamic SQL generation is not supported against multiple base tables.

using (OleDbConnection conn = new OleDbConnection(con))
      {
        try
        {
          if (conn.State == ConnectionState.Closed) { conn.Open(); }
          string sql = "select " +
            "表1.姓名," +
            "表1.性别," +
            "表1.年龄," +
            "表1.手机," +
            "表1.邮箱," +
            "表2.部门," +
            "表2.职位," +
            "表2.职责," +
            "表2.备注" +
            " from [表1] inner join [表2] on 表2.姓名=表1.姓名";
          DataTable dt = new DataTable();
          using (OleDbDataAdapter da = new OleDbDataAdapter(sql, conn))
          {
            da.Fill(dt);
          }
          this.dataGridView.AutoGenerateColumns = false;
          this.dataGridView.DataSource = dt;
        }
using (OleDbConnection cCon = new OleDbConnection(con))
      {
        string sql = "select " +
            "表1.姓名," +
            "表1.性别," +
            "表1.年龄," +
            "表1.手机," +
            "表1.邮箱," +
            "表2.部门," +
            "表2.职位," +
            "表2.职责," +
            "表2.备注" +
            " from [表1] inner join [表2] on 表2.姓名=表1.姓名";
        OleDbDataAdapter da = new OleDbDataAdapter(sql, cCon);
        OleDbCommandBuilder cBu = new OleDbCommandBuilder(da);
        DataTable dt = this.dataGridView.DataSource as DataTable;
        try
        {
          da.Update(dt);
          dt.AcceptChanges();
          MessageBox.Show("数据保存完成!");
        }
绑定DataTable的Datagridview如何更新
这是告诉你这个数据库不支持多表查询
你不会是把多个excel工作簿当成数据表在操作吧??
绑定DataTable的Datagridview如何更新
先用数据库客户端执行你的SQL语句,确认没问题了再放到代码里去
绑定DataTable的Datagridview如何更新
引用 6 楼 Z65443344 的回复:

这是告诉你这个数据库不支持多表查询
你不会是把多个excel工作簿当成数据表在操作吧??

我的是Access数据库,我应该要怎么操作?

绑定DataTable的Datagridview如何更新
引用 7 楼 Z65443344 的回复:

先用数据库客户端执行你的SQL语句,确认没问题了再放到代码里去

导入时绑定可以出结果,但是更新的那段出错

绑定DataTable的Datagridview如何更新
哦,我知道你到底是什么问题了
你这根本不是”Datagridview怎么更新”,而是要把Datagridview里的数据更新回数据库
那么绑定了多表,当然是更新不回去的了
你得学会自己写sql语句更新,不要只知道绑定Datagridview
绑定DataTable的Datagridview如何更新
引用 10 楼 Z65443344 的回复:

哦,我知道你到底是什么问题了
你这根本不是”Datagridview怎么更新”,而是要把Datagridview里的数据更新回数据库
那么绑定了多表,当然是更新不回去的了
你得学会自己写sql语句更新,不要只知道绑定Datagridview

单表绑定为什么可以更新回去呢?只能一行行用SQL语句再更新数据库吗?

绑定DataTable的Datagridview如何更新
单表绑定,你是绑定了一个实体表,有主键,有字段,有数据,当然就可以更新回去
而多表绑定,你相当于绑定了一个视图,谁知道你到底要把数据更新回哪个表里,数据都是动态计算出来的,那些列可能其实哪个表里都没有,也可能2个表里都有
绑定DataTable的Datagridview如何更新
引用 12 楼 Z65443344 的回复:

单表绑定,你是绑定了一个实体表,有主键,有字段,有数据,当然就可以更新回去
而多表绑定,你相当于绑定了一个视图,谁知道你到底要把数据更新回哪个表里,数据都是动态计算出来的,那些列可能其实哪个表里都没有,也可能2个表里都有

那按照你们的经验应该要怎么操作这种情况?遍历Datagridview的行进行SQL语句多表更新?
或者有什么更快的方法吗?总感觉这样好麻烦

绑定DataTable的Datagridview如何更新
根据我们的经验,多表查询的数据就不应该更新回去.这已经不是原始数据了.
或者其实你只是某些字段想替换成汉字,完全可以使用另外的手段实现,比如在表格里添加combobox类型的列,绑定displaymember和valuemember,让它显示汉字,但是值还是跟数据库中一致
而且不要只会绑定来绑定去的,也该学学如何sql语句更新数据库了.不要老怕麻烦,其实就是一个循环而已
绑定DataTable的Datagridview如何更新
引用 14 楼 Z65443344 的回复:

根据我们的经验,多表查询的数据就不应该更新回去.这已经不是原始数据了.
或者其实你只是某些字段想替换成汉字,完全可以使用另外的手段实现,比如在表格里添加combobox类型的列,绑定displaymember和valuemember,让它显示汉字,但是值还是跟数据库中一致
而且不要只会绑定来绑定去的,也该学学如何sql语句更新数据库了.不要老怕麻烦,其实就是一个循环而已

是这样的,因为大家都习惯了Excel表格,几个人的工作分前后,又各分表格,但是大部分数据是A人的表拷贝到B人的表,B人再在自己的这个表再加几列,这样表格就太多了,想要跟踪进度都比较困难,我现在想整合大家。之前我同部门几个人的表我都采用的是Listview显示,双击一行后弹窗显示修改的。我不是怕写更新SQL的麻烦,我是怕影响速度,到时候速度还不如Excel方便。大家都不愿意整合了,就没什么意义。

绑定DataTable的Datagridview如何更新
30分
为什么要用ListView,
而且这种数据有什么需要多表查询的吗,不是每个人一张表而已吗
而且你即使使用了绑定控件的方式,后台依然还是变成sql语句循环插入或批量插入,给你封装了一下而已
想批量插入,你可以把多条insert语句拼接到一个sql里一次执行
绑定DataTable的Datagridview如何更新
引用 16 楼 Z65443344 的回复:

为什么要用ListView,
而且这种数据有什么需要多表查询的吗,不是每个人一张表而已吗
而且你即使使用了绑定控件的方式,后台依然还是变成sql语句循环插入或批量插入,给你封装了一下而已
想批量插入,你可以把多条insert语句拼接到一个sql里一次执行

这也是我学习C#的过程,刚开始是接触Listview,所以最先用那个作为工作任务清单,同部门的几个人同时操作(我们开始是用的Excel共享功能),现在是因为其他人需要像Excel那样编辑,所以开始学习使用Datagridview,为什么多张表呢,是因为A人的表的一部分字段是B人的表的基础,B人的表自己有另外的字段依据这些字段,B人的表的一部分呢又是C人的表的基础,就像做产品流程一样。我没有做过这种QA流程,所以走了好多弯路。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明绑定DataTable的Datagridview如何更新
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!