我看了看你的思路好像有一点不太对。
你的文本框首先绑定到数据对象上(好像是视图),然后新建记录还是这个文本框上。(不知道理解的对不对!!)
我认为如果是我如上理解,那么就有一些问题。问题在被绑定数据库后,他就是一个被动者。他的变化应当根据绑定对象进行改变。
所以在思路上你在没有解除绑定的情况下有给文本框指定新的对象。这样容易出错的。
在程序上,你运行了ExecuteNonQuery后出错,说明这时候绑定对象和输入对象有点问题。反正从你描述来看我不知道应当执行那个数据。解决方法:在新建是解除绑定,点击ExecuteNonQuery后在加入绑定,在绑定前最好清空文本框。你试一试吧!

解决方案 »

  1.   

    谢谢chsl918(飞点肥店) 的回答
    其实刚开始的时候,我就是按你说的在添加的时候先解除文本框的
    绑定,在执行完后再重新绑定,但是这样需要写一些代码来同时更新
    当前纪录集以达到和数据库同步的作用但是如果我不解除绑定 用this.BindingContext[myDv].AddNew();
    和this.BindingContext[myDv].EndCurrentEdit();
    然后添加纪录,就可以在当前视图和数据库中同时更新数据。并且我也说了如果把过滤代码去掉
    一切都正常。所以我需要知道为什么,跟踪不到,请帮忙了!!!!!!!!!!
      

  2.   

    可能是我没有说清楚。
    首先假设你的文本框是a,绑定的数据是b,需要加入文本框的数据是c。
    是这样,当a绑定b后,a的值就时时都等于b。如果b有什么变化a同样跟着变化。同理a有什么变化b也同样跟着变化。
    在绑定的情况下a如果负值等于c。
    根据以上的推理b=c。
    这样就要更改b,
    可是b是一个视图,是不能被更改的。所以就出现错误了。(就算b不是视图,将c负值给b也是你不想看到的。)理论上这是个逻辑错误。
    因为a恒等于b,而你要a=c,但是b!=c,所以错误。其实我也不知道分析的对不对,但是感觉上是这样的。所以仅供参考。
      

  3.   

    那请问为什么我把myDv.RowFilter="Department_id =" + 当前节点的tag的值;
    这代码去掉,就完全对了?(添加的时候完全符合我的要求呢)
      

  4.   

    我的输入没有部门编号这个文本框,该值是根据当前节点的tag的值来添加的
    我的删除和修改都没错,就是添加有问题,好像是视图过滤后,用
    this.BindingContext[myDv].AddNew();绑定老是有问题
    而不过滤就可以,是不是过滤后有什么事件发生了,导致
    this.BindingContext[myDv].AddNew();这句代码不正确?其实用代码来试试很快的,只作一个添加,保存都不用写就可以很快的
    试出来的,看看问题到底是什么!