主从表设计中为何不能更新明细表中的列

charpin 2010-05-15 10:59:49
请看如下的代码段,在dtPurchaseDetail_ColumnChanged事件中完成了统计明细表中的金额,然后写入主表中,奇怪的是有了这段程序后,我却不能向明细表中添加记录了,好像主从表的关系不起作用了,然后我把drPurchaseMaster.BeginEdit()到
drPurchaseMaster.EndEdit()这段注释掉就没问题,请问各位知道是哪里有问题吗


Public Class frmPurchase
Dim bmPurchaseDetail As BindingManagerBase
Dim bmPurchaseMaster As BindingManagerBase
Dim WithEvents dtPurchaseDetail As New DataTable
Dim PurchaseDetailHasChange As Boolean
Private Sub frmPurchase_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
bmPurchaseMaster = Me.BindingContext(DsPurchase1, "PurchaseMaster")
bmPurchaseDetail = Me.BindingContext(DsPurchase1, "PurchaseMaster.FK_PurchaseMaster_PurchaseDetail")
dtPurchaseDetail = MyDataSet.Tables("PurchaseDetail")

PurchaseDetailHasChange = True

MyDataSet.Tables("PurchaseMaster").Columns("AccountPayable").DefaultValue = 0
MyDataSet.Tables("PurchaseMaster").Columns("Paid").DefaultValue = 0
MyDataSet.Tables("PurchaseMaster").Columns("Subtotal").DefaultValue = 0
MyDataSet.Tables("PurchaseMaster").Columns("ValueAddTax").DefaultValue = 0
MyDataSet.Tables("PurchaseMaster").Columns("Amount").DefaultValue = 0

MyDataSet.Tables("PurchaseDetail").Columns("ProductID2").DefaultValue = "NULL"
MyDataSet.Tables("PurchaseDetail").Columns("PurchaseQuantity").DefaultValue = 0
MyDataSet.Tables("PurchaseDetail").Columns("PurchaseUnitPrice").DefaultValue = 0
MyDataSet.Tables("PurchaseDetail").Columns("PurchaseAmount").DefaultValue = 0

End Sub
Public Overrides Sub SetMyDataSet()
Dim dataCon As New KS.DataConnection
cnKS.ConnectionString = dataCon.getConnection
MyDataSet = DsPurchase1
MyDataItem = "PurchaseMaster"
MyConnection = cnKS
'MyBase.SetMyDataSet()
End Sub
Public Overrides Sub FillData()
daPurchaseMaster.Fill(MyDataSet, "PurchaseMaster")
daPurchaseDetail.Fill(MyDataSet, "PurchaseDetail")
daSupplier.Fill(MyDataSet, "Supplier")
End Sub
Public Overrides Sub UploadAddData()
UpdateData()
End Sub
Public Overrides Sub UploadModifyData()
UpdateData()
End Sub
Public Overrides Sub UploadDeletedData()
UpdateData()
End Sub
Public Sub UpdateData()
daPurchaseMaster.Update(MyDataSet, "PurchaseMaster")
daPurchaseDetail.Update(MyDataSet, "PurchaseDetail")
End Sub

Private Sub dgDetail_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgDetail.CellContentClick

End Sub

Private Sub dgDetail_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dgDetail.DoubleClick
'bmPurchaseMaster.EndCurrentEdit()
bmPurchaseDetail.EndCurrentEdit()
Dim frmSelectProductID As New frmSelectProductID()
If frmSelectProductID.ShowDialog() = Windows.Forms.DialogResult.OK Then
dgDetail.Item(0, dgDetail.CurrentRow.Index).Value = frmSelectProductID.ProductID
End If
End Sub

Private Sub dtPurchaseDetail_ColumnChanged(ByVal sender As System.Object, ByVal e As System.Data.DataColumnChangeEventArgs) Handles dtPurchaseDetail.ColumnChanged
Dim drPurchaseMaster As DataRow
Dim drPurchaseDetail As DataRow
Dim iSubtotal As Integer
Try
If PurchaseDetailHasChange Then
'MessageBox.Show(bmPurchaseMaster.Position)
PurchaseDetailHasChange = False
e.Row("PurchaseAmount") = e.Row("PurchaseQuantity") * e.Row("PurchaseUnitPrice")
iSubtotal = 0
drPurchaseMaster = Me.DsPurchase1.Tables("PurchaseMaster").Rows(bmPurchaseMaster.Position)
For Each drPurchaseDetail In drPurchaseMaster.GetChildRows("FK_PurchaseMaster_PurchaseDetail")
iSubtotal = iSubtotal + drPurchaseDetail("PurchaseAmount")
Next
'MessageBox.Show(bmPurchaseMaster.Position)
'messagebox.Show(dspurchase1.Tables("PurchaseMaster")

'MessageBox.Show(drPurchaseMaster.RowState)
drPurchaseMaster.BeginEdit()
'MessageBox.Show(drPurchaseMaster.RowState)

'TextBox9.Text = iSubtotal
'TextBox10.Text = iSubtotal * 0.05
'TextBox11.Text = TextBox9.Text + TextBox10.Text

drPurchaseMaster("SubTotal") = iSubtotal
drPurchaseMaster("ValueAddTax") = drPurchaseMaster("SubTotal") * 0.05
drPurchaseMaster("Amount") = drPurchaseMaster("SubTotal") + drPurchaseMaster("ValueAddTax")
drPurchaseMaster.EndEdit()

'MessageBox.Show(drPurchaseMaster.RowState)
End If

Catch ex As Exception
MessageBox.Show(ex.ToString)
Finally
PurchaseDetailHasChange = True

End Try
End Sub
End Class
...全文
84 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
charpin 2010-05-28
  • 打赏
  • 举报
回复
顶上去
charpin 2010-05-21
  • 打赏
  • 举报
回复
我想问是不是在 Datatable的 ColumnChanged中是不是不能对主表进行改写
wwb198686 2010-05-16
  • 打赏
  • 举报
回复
支持!不太明白。
Forrest23 2010-05-16
  • 打赏
  • 举报
回复
不太明白你的意思
yuanhuiqiao 2010-05-16
  • 打赏
  • 举报
回复

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧