小弟初学数据库编程,遇到两个问题,请高手指教:假设有两个表:Orders 和 OrderDetails,其中Orders.Order_ID 和OrderDetails.Order_ID关联用.net数据窗体向导生成一个包含主从表的窗体后,DataRelation已经自动生成,怎样才能做到:怎样才能做到在Orders中新增一条记录,Orders.Order_ID所绑定的控件中也输入了值后,在OrderDetails.Order_ID中也自动设置该值?、如果上面那个问题难度比较大,那么我就用手工输入也可以,但是为什么在我输入了所有的内容后更新时总会提示:"ForeignKeyConstraint o(DataRelation名称) 要求在父表中存在子键值(001(我在主表Order_ID中输入的值))。要更正该值吗?"错误图片:http://vbnet.kunshanren.com/down/055.jpg为什么会这样呢?请高手帮小弟看看。

解决方案 »

  1.   

    think8848 (传说) 好呀!好久没见到你了。
      

  2.   

    关于你的问题:
    --Orders.Order_ID所绑定的控件中也输入了值后,在OrderDetails.Order_ID中也自动设置该值?...会的!但造成此问题的原因是:因为主表Orders正添加或修改的数据行没有结果编辑:  bm.EndCurrentEdit()或 row.EndEdit一般是用BindingManagerBase来实现数据导航功能的。所以,在OrderDetails中添加数据之前要:
    this.BindingContext(this.dsOrders,"Orders").EndCurrentEdit();
      

  3.   

    3tzjq(永不言弃)你好 那个代码是向导产生的,而且EndCurrentEdit这个代码也已经有了,可是还是不行呀,为什么呢?你那里可以吗?能不能给小弟一段示例代码?
      

  4.   

    我随便用Northwind的Orders和OrderDetail表,再用数据窗体向导生成一个窗体,点更新的时候就不行了。http://vbnet.kunshanren.com/down/Test028.rar麻烦你了
      

  5.   

    已解决!问题是你的添加数据流程不对!请下载我已更改的测试程序:
    http://tttzjq.xinwen365.com/Downloads/Test028.Proj请注意:下载后将扩展名.Proj 改为 .rar
      

  6.   

    3tzjq兄,你能不能将我错在哪里指出来?
      

  7.   

    你的btnAdd_Click中是先
      Me.BindingContext(objds, "Orders").EndCurrentEdit()
    再Me.BindingContext(objds, "Orders").AddNew()
    你应有个确定按钮。或这样:
    private intState =0'添加状态:0=闲置,1=添加中,2=确定添加private sub btnAdd_Click.....
    intState +=1
    select intState
    case 1
      Me.BindingContext(objds, "Orders").AddNew()
    case 2‘要按两个添加才会结束编辑
      Me.BindingContext(objds, "Orders").EndCurrentEdit()
    case else
      intState =0
    end selectend sub请见我已更改过的 http://tttzjq.xinwen365.com/Downloads/Test028.Proj
      

  8.   

    你的btnAdd_Click中是先
      Me.BindingContext(objds, "Orders").EndCurrentEdit()
    再Me.BindingContext(objds, "Orders").AddNew()
    你应有个确定按钮。或这样:
    private intState =0'添加状态:0=闲置,1=添加中,2=确定添加private sub btnAdd_Click.....
    intState +=1
    select intState
    case 1
      Me.BindingContext(objds, "Orders").AddNew()
    case 2‘要按两个添加才会结束编辑
      Me.BindingContext(objds, "Orders").EndCurrentEdit()
    case else
      intState =0
    end selectend sub请见我已更改过的 http://tttzjq.xinwen365.com/Downloads/Test028.Proj你的btnAdd_Click中是先
      Me.BindingContext(objds, "Orders").EndCurrentEdit()
    再Me.BindingContext(objds, "Orders").AddNew()
    你应有个确定按钮。或这样:
    private intState =0'添加状态:0=闲置,1=添加中,2=确定添加private sub btnAdd_Click.....
    intState +=1
    select intState
    case 1
      Me.BindingContext(objds, "Orders").AddNew()
    case 2‘要按两个添加才会结束编辑
      Me.BindingContext(objds, "Orders").EndCurrentEdit()
    case else
      intState =0
    end selectend sub请见我已更改过的 http://tttzjq.xinwen365.com/Downloads/Test028.Proj你的btnAdd_Click中是先
      Me.BindingContext(objds, "Orders").EndCurrentEdit()
    再Me.BindingContext(objds, "Orders").AddNew()
    你应有个确定按钮。或这样:
    private intState =0'添加状态:0=闲置,1=添加中,2=确定添加private sub btnAdd_Click.....
    intState +=1
    select intState
    case 1
      Me.BindingContext(objds, "Orders").AddNew()
    case 2‘要按两个添加才会结束编辑
      Me.BindingContext(objds, "Orders").EndCurrentEdit()
    case else
      intState =0
    end selectend sub请见我已更改过的 http://tttzjq.xinwen365.com/Downloads/Test028.Proj