ordersform.vb
来自「wrox出版社的另一套经典的VB2005数据库编程学习书籍,收集了书中源码,郑重」· VB 代码 · 共 1,404 行 · 第 1/4 页
VB
1,404 行
Order_DetailsBindingSource.EndEdit()
OrdersBindingSource.EndEdit()
'V3Final: Update Orders and Order Details table
If UpdateBaseTables(False) Then
NorthwindDataSet.Orders.AcceptChanges()
NorthwindDataSet.Order_Details.AcceptChanges()
btnSaveOrders.Enabled = False
Else
MsgBox("Order update for '" + CustomerIDTextBox.Text + _
"' failed.", MsgBoxStyle.Exclamation, strTitle)
Return
End If
blnIsNewOrderRow = False
btnNewOrder.Enabled = True
btnCancelOrderEdits.Enabled = False
Catch exc As Exception
MsgBox(exc.Message + exc.StackTrace, , "Exception Saving Changes")
End Try
End Sub
Private Sub btnCancelOrderEdits_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnCancelOrderEdits.Click
Try
'Cancel edits to Order Details and Orders
'ERROR: Wrong data connector (fixed 7/31/04)
'Order_DetailsBindingSource.CancelEdit()
'Should have been FK_Order_Details_OrdersBindingSource.CancelEdit()
'Order_DetailsDataGridView.CancelEdit()
'OrdersBindingSource.CancelEdit()
'OrdersDataGridView.CancelEdit()
'Requires RemoveAt to remove added rows
With FK_Order_Details_OrdersBindingSource
If blnIsNewOrderRow Then
While .Count > 0
.RemoveAt(.Count - 1)
End While
Else
.CancelEdit()
End If
'.ResetBindings(False)
End With
With OrdersBindingSource
If blnIsNewOrderRow Then
.RemoveAt(.Count - 1)
Else
.CancelEdit()
End If
'.ResetBindings(False)
.MoveFirst()
End With
blnIsNewOrderRow = False
OrdersBindingSource.MoveFirst()
If blnUseTabs And tabOrders.TabPages.Count = 2 Then
tabOrders.TabPages.Remove(pagEditOrder)
tabOrders.SelectedTab = pagCustOrders
End If
'Buttons setup
btnNewOrder.Enabled = True
btnCancelOrderEdits.Enabled = False
btnSaveOrders.Enabled = False
btnCancelPage1Changes.Enabled = False
btnSavePage1Changes.Enabled = False
Catch exc As Exception
MsgBox(exc.Message + exc.StackTrace, , "Cancel Edits Exception")
End Try
End Sub
#End Region
#Region "OrdersDataGridView Event Handlers"
'************************************************
'OrdersDataGridView Event Handlers
'DefaultValuesNeeded, CellValueChanged, DataError
'************************************************
Private Sub Order_DetailsDataGridView_RowsAdded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles Order_DetailsDataGridView.RowsAdded
btnSaveOrders.Enabled = True
btnCancelOrderEdits.Enabled = True
End Sub
Private Sub Order_DetailsDataGridView_RowsRemoved(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowsRemovedEventArgs) Handles Order_DetailsDataGridView.RowsRemoved
btnSaveOrders.Enabled = True
btnCancelOrderEdits.Enabled = True
End Sub
Private Sub OrdersDataGridView_DefaultValuesNeeded(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewRowEventArgs) Handles OrdersDataGridView.DefaultValuesNeeded
'Add default values to a new Orders row
SetDefaultOrderValues(e.Row)
End Sub
Private Sub SetDefaultOrderValues(ByVal rowAdded As DataGridViewRow)
Try
With rowAdded
'Default values
.Cells(1).Value = Me.CustomerIDTextBox.Text
'V3Final: Andrew Fuller (2) is Sales Vice President
.Cells(2).Value = 2
.Cells(3).Value = Today.ToShortDateString
'Two weeks is the default shipment arrival time
.Cells(4).Value = Today.AddDays(14).ToShortDateString
'United Package is the preferred shipper
.Cells(6).Value = 2
'Freight requires a 0 value, null throws an exception
.Cells(7).Value = 0
'Default shipping address is the billing address
.Cells(8).Value = Me.CompanyNameTextBox.Text
.Cells(9).Value = Me.AddressTextBox.Text
.Cells(10).Value = Me.CityTextBox.Text
.Cells(11).Value = Me.RegionTextBox.Text
.Cells(12).Value = Me.PostalCodeTextBox.Text
.Cells(13).Value = Me.CountryTextBox.Text
End With
Catch exc As Exception
End Try
End Sub
Private Sub OrdersDataGridView_CellValueChanged(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles OrdersDataGridView.CellValueChanged
With OrdersDataGridView
'Test for replacing EmployeeID null value
If blnIsNewOrderRow Then
'If Not TypeOf (.Rows(.Rows.Count - 2).Cells(2)) Is DBNull Then
btnSaveOrders.Enabled = True
btnCancelOrderEdits.Enabled = True
blnIsNewOrderRow = False
'End If
Else
btnSaveOrders.Enabled = True
btnCancelOrderEdits.Enabled = True
blnIsNewOrderRow = False
End If
End With
End Sub
Private Sub OrdersDataGridView_DataError(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles OrdersDataGridView.DataError
'Handle data entry errors (delegate)
Dim strMsg As String = "Invalid data in column " + e.ColumnIndex.ToString + _
" of row " + e.RowIndex.ToString + " of the Orders grid. " + vbCrLf + vbCrLf + _
"Press Esc to cancel the edit or enter an appropriate value."
MsgBox(strMsg, MsgBoxStyle.Exclamation, strTitle)
End Sub
#End Region
#Region "Order_DetailsDataGridView Event Handlers"
'******************************************************
'Order_DetailsDataGridView event handlers
'DefaultValuesNeeded, CellValueNeeded, DataError
'(Handles Order_DetailsDataGridView2 via BindingSource)
'******************************************************
Private Sub Order_DetailsDataGridView_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles Order_DetailsDataGridView.CellValueChanged
'Get the UnitPrice value
If blnHasLoaded Then
GetUnitPrice(e.RowIndex, e.ColumnIndex, Order_DetailsDataGridView)
End If
End Sub
Private Sub Order_DetailsDataGridView1_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles Order_DetailsDataGridView1.CellValueChanged
'Get the UnitPrice value
If blnHasLoaded Then
'Run only after loading the combo boxes
GetUnitPrice(e.RowIndex, e.ColumnIndex, Order_DetailsDataGridView1)
'The following applies only to the Edit Selected Orders page
If Not (e.ColumnIndex = 0 Or e.ColumnIndex = 5) Then
'Update the items subtotal for Quantity, ProductID,
'UnitPrice, and Discount changes
GetOrderSubtotal()
btnCancelPage1Changes.Enabled = True
btnSavePage1Changes.Enabled = True
End If
End If
End Sub
Private Sub Order_DetailsDataGridView_DefaultValuesNeeded(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewRowEventArgs) Handles Order_DetailsDataGridView.DefaultValuesNeeded, Order_DetailsDataGridView1.DefaultValuesNeeded
SetDefaultDetailsValues(e.Row)
End Sub
Private Sub SetDefaultDetailsValues(ByVal rowAdded As DataGridViewRow)
'Add temporary default values
blnIsNewDetail = True
With rowAdded
.Cells(1).Value = 1
.Cells(2).Value = 17
.Cells(3).Value = 0
.Cells(4).Value = 0
End With
blnIsNewDetail = False
End Sub
Private Sub Order_DetailsDataGridView_CellValueNeeded(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellValueEventArgs) Handles Order_DetailsDataGridView.CellValueNeeded, Order_DetailsDataGridView1.CellValueNeeded
Order_DetailsCellValueNeeded(e.ColumnIndex, e.RowIndex, e.Value)
End Sub
Private Sub Order_DetailsCellValueNeeded(ByVal intColumnIndex As Integer, _
ByVal intRowIndex As Integer, ByRef objValue As Object)
'Calculate and set the unbound Extended column values
With Order_DetailsDataGridView
Try
'Test for correct column and DBNull values, which throw exceptions
If intColumnIndex = 5 And _
Not (TypeOf (.Rows(intRowIndex).Cells(1).Value) Is DBNull _
OrElse TypeOf (.Rows(intRowIndex).Cells(3).Value) Is DBNull _
OrElse TypeOf (.Rows(intRowIndex).Cells(4).Value) Is DBNull) Then
'Variables are declared for readability
Dim intQuan As Integer
Dim decPrice As Decimal
Dim decDisc As Decimal
intQuan = CInt(.Rows(intRowIndex).Cells(1).Value)
decPrice = CDec(.Rows(intRowIndex).Cells(3).Value)
decDisc = CDec(.Rows(intRowIndex).Cells(4).Value)
objValue = intQuan * decPrice * (1 - decDisc)
End If
Catch exc As Exception
MsgBox(exc.Message + exc.StackTrace, , "Exception Calculating Extended Amount")
End Try
End With
End Sub
Private Sub Order_DetailsDataGridView1_DataError(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles Order_DetailsDataGridView.DataError, Order_DetailsDataGridView1.DataError
'Handle data entry errors (delegate)
Dim strMsg As String = "Invalid data in column " + e.ColumnIndex.ToString + _
" of row " + e.RowIndex.ToString + " of the Order Details grid. " + vbCrLf + vbCrLf + _
"Press Esc to cancel the edit or enter an appropriate value."
MsgBox(strMsg, MsgBoxStyle.Exclamation, strTitle)
End Sub
#End Region
#Region "Order Edit Tab Page Event Handlers"
'************************************
'pagEditOrder tab page event handlers
'SavePage1Changes, CancelPage1Changes
'Return, EmployeeIDTextBox, KeyDown
'Minor updates for V3Final
'************************************
Private Sub btnSavePage1Changes_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnSavePage1Changes.Click
'Save the changes
btnSaveOrders_Click(Nothing, Nothing)
pagEditOrder.Text = "Edit Selected Order"
btnSavePage1Changes.Enabled = False
btnCancelPage1Changes.Enabled = False
End Sub
Private Sub btnCancelPage1Changes_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnCancelPage1Changes.Click
'Cancel the changes and return
btnCancelOrderEdits_Click(Nothing, Nothing)
tabOrders.SelectedTab = pagCustOrders
pagEditOrder.Text = "Edit Selected Order"
tabOrders.TabPages.Remove(pagEditOrder)
btnSavePage1Changes.Enabled = False
btnCancelPage1Changes.Enabled = False
End Sub
Private Sub btnReturn_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnReturn.Click
'Return to the main page
tabOrders.SelectedTab = pagCustOrders
End Sub
Private Sub EmployeeIDTextBox_TextChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles EmployeeIDTextBox.TextChanged
'V3Final: Added high-value test
With EmployeeIDTextBox
If Val(.Text) > 0 And CInt(Val(.Text)) <= cboEmployeeID.Items.Count Then
btnCancelPage1Changes.Enabled = True
btnSavePage1Changes.Enabled = True
'V3Final: Added to sync combo box
cboEmployeeID.SelectedIndex = CInt(Val(.Text)) - 1
End If
End With
End Sub
Private Sub cboEmployeeID_SelectionChangeCommitted(ByVal sender As Object, ByVal e As System.EventArgs) Handles cboEmployeeID.SelectionChangeCommitted
'Update the associated text box
EmployeeIDTextBox.Text = cboEmployeeID.SelectedValue.ToString
End Sub
Private Sub cboShipVia_SelectionChangeCommitted(ByVal sender As Object, ByVal e As System.EventArgs) Handles cboShipVia.SelectionChangeCommitted
'Update the associated text box
ShipViaTextBox.Text = cboShipVia.SelectedValue.ToString
End Sub
Private Sub ShipViaTextBox_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ShipViaTextBox.TextChanged
'Synchronize combo box with text box
With ShipViaTextBox
'Test for value within range
If Val(.Text) > 0 And CInt(Val(.Text)) <= cboShipVia.Items.Count Then
cboShipVia.SelectedIndex = CInt(Val(.Text)) - 1
btnCancelPage1Changes.Enabled = True
btnSavePage1Changes.Enabled = True
End If
End With
End Sub
Private Sub tabOrders_KeyDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) Handles tabOrders.KeyDown
'Display Edit Selected Order tab when user presses F2
If blnUseTabs And e.KeyCode = Keys.F2 Then
Try
With OrdersDataGridView
If .SelectedCells(0).ColumnIndex = 0 Then
Dim objTemp As Object = .Rows(.SelectedCells(0).RowIndex).Cells(5).Value
If tabOrders.TabPages.Count = 1 Then
tabOrders.TabPages.Add(pagEditOrder)
End If
tabOrders.SelectedTab = pagEditOrder
If .Rows(.SelectedCells(0).RowIndex).Cells(5).Value Is DBNull.Value Then
EnableOrderControls(True)
pagEditOrder.Text = "Edit Selected Order"
Else
EnableOrderControls(False)
pagEditOrder.Text = "View Selected Order"
End If
'V3Final added
Call GetOrderSubtotal()
End If
End With
btnCancelPage1Changes.Enabled = False
btnSavePage1Changes.Enabled = False
Catch excSys As Exception
'Ignore the exception
End Try
End If
End Sub
Private Sub EnableOrderControls(ByVal blnEnabled As Boolean)
'Enable or disable Edit Selected Order page
EmployeeIDTextBox.ReadOnly = Not blnEnabled
'V3Final: Combo box added
cboEmployeeID.Enabled = blnEnabled
OrderDateDateTimePicker.Enabled = blnEnabled
RequiredDateDateTimePicker.Enabled = blnEnabled
ShippedDateTextBox.ReadOnly = Not blnEnabled
ShipViaTextBox.ReadOnly = Not blnEnabled
'V3Final: Combo box added
cboShipVia.Enabled = blnEnabled
FreightTextBox.ReadOnly = Not blnEnabled
ShipNameTextBox.ReadOnly = Not blnEnabled
ShipAddressTextBox.ReadOnly = Not blnEnabled
ShipCityTextBox.ReadOnly = Not blnEnabled
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?