📄 form1.vb
字号:
Me.Label4.Size = New System.Drawing.Size(51, 23)
Me.Label4.TabIndex = 24
Me.Label4.Text = "小计"
'
'Label5
'
Me.Label5.Location = New System.Drawing.Point(425, 296)
Me.Label5.Name = "Label5"
Me.Label5.Size = New System.Drawing.Size(51, 23)
Me.Label5.TabIndex = 25
Me.Label5.Text = "税额"
'
'Label6
'
Me.Label6.Location = New System.Drawing.Point(425, 320)
Me.Label6.Name = "Label6"
Me.Label6.Size = New System.Drawing.Size(51, 23)
Me.Label6.TabIndex = 26
Me.Label6.Text = "总计"
'
'TextBox2
'
Me.TextBox2.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.dsTest, "Orders.SubTotal"))
Me.TextBox2.Location = New System.Drawing.Point(492, 264)
Me.TextBox2.Name = "TextBox2"
Me.TextBox2.ReadOnly = True
Me.TextBox2.Size = New System.Drawing.Size(128, 21)
Me.TextBox2.TabIndex = 27
Me.TextBox2.TabStop = False
Me.TextBox2.Text = ""
Me.TextBox2.TextAlign = System.Windows.Forms.HorizontalAlignment.Right
'
'TextBox3
'
Me.TextBox3.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.dsTest, "Orders.Tax"))
Me.TextBox3.Location = New System.Drawing.Point(492, 292)
Me.TextBox3.Name = "TextBox3"
Me.TextBox3.ReadOnly = True
Me.TextBox3.Size = New System.Drawing.Size(128, 21)
Me.TextBox3.TabIndex = 28
Me.TextBox3.TabStop = False
Me.TextBox3.Text = ""
Me.TextBox3.TextAlign = System.Windows.Forms.HorizontalAlignment.Right
'
'TextBox4
'
Me.TextBox4.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.dsTest, "Orders.Amount"))
Me.TextBox4.Location = New System.Drawing.Point(492, 320)
Me.TextBox4.Name = "TextBox4"
Me.TextBox4.ReadOnly = True
Me.TextBox4.Size = New System.Drawing.Size(128, 21)
Me.TextBox4.TabIndex = 29
Me.TextBox4.TabStop = False
Me.TextBox4.Text = ""
Me.TextBox4.TextAlign = System.Windows.Forms.HorizontalAlignment.Right
'
'fmOrders
'
Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
Me.ClientSize = New System.Drawing.Size(645, 345)
Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.TextBox4, Me.TextBox3, Me.TextBox2, Me.Label6, Me.Label5, Me.Label4, Me.gdOrderDetails, Me.dtpOrderData, Me.cbCustomerID, Me.bnLoad, Me.bnUpdate, Me.bnDelete, Me.bnCancel, Me.bnAdd, Me.bnLast, Me.bnNext, Me.bnPrior, Me.bnFirst, Me.TextBox1, Me.Label3, Me.Label2, Me.Label1})
Me.Name = "fmOrders"
Me.Text = "订单输入"
CType(Me.dsTest, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.gdOrderDetails, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub bnFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnFirst.Click
'首笔记录
BmOrders.Position = 0
End Sub
Private Sub bnPrior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnPrior.Click
'上一笔记录
BmOrders.Position -= 1
End Sub
Private Sub bnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnNext.Click
'下一笔记录
BmOrders.Position += 1
End Sub
Private Sub bnLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnLast.Click
'末笔记录
BmOrders.Position = BmOrders.Count - 1
End Sub
Private Sub bnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnAdd.Click
Try
'新建记录
BmOrders.EndCurrentEdit()
BmOrders.AddNew()
Catch err As System.SystemException
MessageBox.Show(err.ToString)
End Try
End Sub
Private Sub bnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnDelete.Click
'删除记录
If BmOrders.Count > 0 Then
BmOrders.RemoveAt(BmOrders.Position)
End If
End Sub
Private Sub bnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnCancel.Click
'取销编辑
BmOrders.CancelCurrentEdit()
End Sub
Private Sub bnLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnLoad.Click
FillData()
End Sub
Private Sub bnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnUpdate.Click
Dim dsTestChange As DataSet
'终止目前所有的资料异动
'明细先储存再储存主档
BmOrderDetails.EndCurrentEdit()
BmOrders.EndCurrentEdit()
'有删除的数据吗?
If Not dsTest.HasChanges(DataRowState.Deleted) Then
Try
'先更新主档再更新明细档
daOrders.Update(dsTest, "Orders")
daOrderDetails.Update(dsTest, "OrderDetails")
dsTest.AcceptChanges()
Catch err As System.SystemException
dsTest.RejectChanges()
MessageBox.Show(err.ToString)
Throw
End Try
Else
Try
'先更新明细档再更新主档
daOrderDetails.Update(dsTest, "OrderDetails")
daOrders.Update(dsTest, "Orders")
dsTest.AcceptChanges()
Catch err As System.SystemException
dsTest.RejectChanges()
MessageBox.Show(err.ToString)
Throw
End Try
End If
End Sub
Private Sub fmOrders_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'先填入资料
FillData()
'把dtOrderDetails这个DataTable对象, 指定为dsTest里的OrderDetails
dtOrderDetails = dsTest.Tables("OrderDetails")
'把Orders与BmOrders做资料系结
BmOrders = Me.BindingContext(dsTest, "Orders")
'把OrderDetailss与BmOrderDetais做资料系结
BmOrderDetails = Me.BindingContext(dsTest, "Orders.OrdersOrderDetails")
'一开始, 预设是ColumnChanged事件里的计算程序代码是要执行的
OrderDetailsHasChange = True
'把SubTotal这个DataColumn对象, 指定为Orders里的SubTotal
SubTotal = dsTest.Tables("Orders").Columns("SubTotal")
SubTotal.DefaultValue = 0
'把Tax这个DataColumn对象, 指定为Orders里的Tax
Tax = dsTest.Tables("Orders").Columns("Tax")
Tax.DefaultValue = 0
'把Amount这个DataColumn对象, 指定为Orders里的Amounte
Amount = dsTest.Tables("Orders").Columns("Amount")
Amount.DefaultValue = 0
'把Quantity这个DataColumn对象, 指定为OrderDetails里的Quantity
Quantity = dsTest.Tables("OrderDetails").Columns("Quantity")
Quantity.DefaultValue = 0
'把UnitPrice这个DataColumn对象, 指定为OrderDetails里的UnitPrice
UnitPrice = dsTest.Tables("OrderDetails").Columns("UnitPrice")
UnitPrice.DefaultValue = 0
End Sub
Private Sub FillData()
'关闭数据表格的条件约束
dsTest.EnforceConstraints = False
'填入数据集, 注意顺序
'填入订单主文件
daOrders.Fill(dsTest)
'填入订单明细文件
daOrderDetails.Fill(dsTest)
'填入客户档
daCustomer.Fill(dsTest)
'打开数据表格的条件约束
dsTest.EnforceConstraints = True
End Sub
Private Sub dtOrderDetails_ColumnChanged(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs) Handles dtOrderDetails.ColumnChanged
'建立DataRow对象-Orders
Dim drOrders As DataRow
'建立DataRow对象-OrderDetails
Dim drOrderDetails As DataRow
'用来计算总数的变量
Dim iSubTotal As Integer
Try
'如果为False, 就不再进去执行, 避免造成无穷回路
If OrderDetailsHasChange Then
'进来先变回False
OrderDetailsHasChange = False
'计算明细的金额
e.Row("DetailAmount") = e.Row("Quantity") * e.Row("UnitPrice")
'找出目前的Orders所在的记录
drOrders = dsTest.Tables("Orders").Rows(BmOrders.Position)
'先归0, 养成习惯, 虽然默认值就是0
iSubTotal = 0
'找出每笔明细出来
For Each drOrderDetails In drOrders.GetChildRows _
("OrdersOrderDetails")
'金额累加
iSubTotal = iSubTotal + drOrderDetails("DetailAmount")
Next
'变为编辑模式
drOrders.BeginEdit()
'明细的总计金额=主档的小计
drOrders("SubTotal") = iSubTotal
'计算税额
drOrders("Tax") = drOrders("SubTotal") * 0.05
'计算总计
drOrders("Amount") = drOrders("SubTotal") + drOrders("Tax")
'储存, 结束编辑
drOrders.EndEdit()
End If
Finally
'无论如何, 要把旗标变回True
OrderDetailsHasChange = True
End Try
End Sub
End Class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -