解决方案 »

  1.   

    绑定了datatable(后台数据源)之后,数据源里的数据变化,表格里的数据就会跟着变化
    前提是,datatable是引用类型,不要重新new,重新new过的dt就跟绑定表格的那个没有任何关系了
      

  2.   

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

  3.   

    你说的有点让我头晕,刚开始用这个控件,感觉好多都不明白,总觉得有比Listview更快捷的方式但是又不会。上面少了这么一句DataTable dt = this.dataGridView.DataSource as DataTable;你看能不能给
      

  4.   

    今天试了发现异常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("数据保存完成!");
            }
      

  5.   

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

  6.   

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

  7.   

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

  8.   

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

  9.   

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

  10.   

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

  11.   

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

  12.   

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

  13.   

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

  14.   

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