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 + -
显示快捷键?