先看一段代码:
            if (ValidateInsert())
            {
                if (biz.InsertAccount(……))//A
                {
                    DataTable dtInserted = biz.FillAccountTable();
          dataGridView1.DataSource=dtInserted;//B
                }
                else
                {
                    MessageBox.Show("……");
                }
            }
在A那个地方,数据已经成功添加到表中了(打开数据库查看过)
通过FillAccountTable,得到了表中的全部数据
但是,在B执行了以后,DataGridView中并没有显示刚刚添加的行,如果再添加一条数据,可以把前面添加的一条数据显示出来,为什么啊?

解决方案 »

  1.   

    已经解决了,不过应该还有更好的办法
    是这样的,biz这个对象一直是存在的,在数据处理类里面Insert函数虽然把数据写入了表,但是内存里的datatable还是老的,重新"select * from ……"也没用(不知道为什么)
    这样我只能新建了一个函数
    private void commit(){
       Conn.close();
       Conn.open();
    }
    这样可以成功,但是有点傻啊,有没有别的办法
      

  2.   

    vs2005的话,还是推荐使用BindingSource。BindingSource有个AddNew()方法,AddNew()时会自动触发BindingSource.AddingNew事件,在该事件代码里增加数据行。AddNew()方法会自动提交更新到基础数据表。也许和楼主的问题不太相关,但还是参考一下吧~
      

  3.   

    好象这样吧。
    dataGridView1.DataSource=dtInserted.defaultView;
    DataSoure一般都用视图吧。