ordersform.vb
来自「wrox出版社的另一套经典的VB2005数据库编程学习书籍,收集了书中源码,郑重」· VB 代码 · 共 1,404 行 · 第 1/4 页
VB
1,404 行
End If
Next
End With
btnSaveOrders.Enabled = False
btnCancelOrderEdits.Enabled = False
Else
MsgBox("Customer " + cboCustomerID.Text + " not found.", _
MsgBoxStyle.Exclamation, strTitle)
cboCustomerID.Focus()
End If
Catch exc As Exception
MsgBox(exc.Message + exc.StackTrace, MsgBoxStyle.Information, "GetOrders Exception")
End Try
End Sub
Private Sub SetOrdersReadOnly()
'For all customer orders shipped
EnableOrdersGrid(True, True)
EnableOrder_DetailsGrid(True, True)
btnEditOrders.Enabled = False
btnSaveOrders.Enabled = False
btnCancelOrderEdits.Enabled = False
End Sub
Private Sub btnEditCustData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEditCustData.Click
'Enable the Customers text boxes and buttons
LockCustTextBoxes(False, True)
ShowCustomerEditButtons(True)
btnSaveCustData.Enabled = True
btnCancelCustEdit.Enabled = True
btnNewCustomer.Enabled = False
btnGetOrders.Enabled = False
End Sub
#End Region
#Region "New Customer and Related Event Handlers"
'**************************************************************
'Event handlers and procedures for adding a new customer record
'**************************************************************
Private Sub btnNewCustomer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNewCustomer.Click
'Execute only if no changes pending
If NorthwindDataSet.HasChanges Then
Dim strMsg As String = "You must save all pending changes before adding a new customer."
MsgBox(strMsg, MsgBoxStyle.Exclamation, strTitle)
End If
'Clear the dataset to remove previous GetOrders data
NorthwindDataSet.Clear()
'Add a new customer record
CustomersBindingSource.AddNew()
'Clear the text boxes
ClearCustomerTextBoxes()
'Hide the grids
ShowGrids(False)
LockCustTextBoxes(False, False)
lblHelp.Visible = False
'Command button setup
ShowOrdersEditButtons(False)
ShowCustomerEditButtons(True)
btnNewCustomer.Enabled = False
btnEditCustData.Enabled = False
btnGetOrders.Enabled = False
btnSaveCustData.Enabled = False
btnCancelCustEdit.Enabled = True
btnNewOrder.Enabled = False
blnIsNewCustomer = True
If blnUseSampleData Then
SampleNewCustomerData()
End If
CompanyNameTextBox.Focus()
End Sub
Private Sub ClearCustomerTextBoxes()
'Clear all text boxes
CustomerIDTextBox.Text = ""
CompanyNameTextBox.Text = ""
ContactNameTextBox.Text = ""
ContactTitleTextBox.Text = ""
AddressTextBox.Text = ""
CityTextBox.Text = ""
RegionTextBox.Text = ""
PostalCodeTextBox.Text = ""
CountryTextBox.Text = ""
PhoneTextBox.Text = ""
FaxTextBox.Text = ""
End Sub
Private Sub btnSaveCustData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSaveCustData.Click
'TODO: Test for all required entries
If blnIsNewCustomer Then
clsCancelNew.EndNew(CustomersBindingSource.Position)
Else
CustomersBindingSource.EndEdit()
End If
'V3Final: Update customers table
If UpdateBaseTables(False) Then
Try
CustomersTableAdapter.Update(NorthwindDataSet.Customers)
Catch exConcur As DBConcurrencyException
'Ignore the exception
Catch exSys As System.Exception
MsgBox(exSys.Message, MsgBoxStyle.Exclamation, "Update System Exception")
End Try
Else
Return
End If
If blnIsNewCustomer Then
'Enable entering a new order after saving a new customer
ShowOrdersEditButtons(True)
If blnUseTabs Then
OrdersDataGridView.Visible = True
lblOrdersGrid.Visible = True
chkTabPageEdit.Visible = True
pagEditOrder.Text = "Edit New Order"
txtHelp.Visible = False
Else
ShowGrids(True)
End If
EnableOrdersGrid(True, False)
EnableOrder_DetailsGrid(True, False)
'Add a new order for the customer
btnNewOrder_Click(Nothing, Nothing)
blnIsNewCustomer = False
End If
SaveOrCancelCustDataButtons()
End Sub
Private Sub btnCancelCustEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelCustEdit.Click
'Undo the customer edits
'For testing
Dim intCtr As Integer = CustomersBindingSource.Count
If blnIsNewCustomer And bsCustsLookup.Count > 0 Then
'Remove the added (last) record
'CustomersBindingSource.removeat
bsCustsLookup.RemoveAt(bsCustsLookup.Count - 1)
ClearCustomerTextBoxes()
'CustomersBindingSource.CancelEdit()
clsCancelNew.CancelNew(CustomersBindingSource.Position)
blnIsNewCustomer = False
Else
CustomersBindingSource.CancelEdit()
End If
'For testing
intCtr = CustomersBindingSource.Count
SaveOrCancelCustDataButtons()
End Sub
Private Sub SaveOrCancelCustDataButtons()
'Button and text box setup after save or cancel
btnNewCustomer.Enabled = True
btnSaveCustData.Enabled = False
btnCancelCustEdit.Enabled = False
btnGetOrders.Enabled = True
btnNewOrder.Enabled = True
LockCustTextBoxes(True, True)
End Sub
Private Sub ContactNameTextBox_GotFocus(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles ContactNameTextBox.GotFocus
If blnIsNewCustomer Then
If Len(CompanyNameTextBox.Text) > 3 Then
'Compute a five-character CustomerID
cboCustomerID.Text = ""
With CompanyNameTextBox
If InStr(.Text, " ") > 0 Then
Dim intPos As Integer
intPos = InStr(.Text, " ")
strCustID = UCase(Mid(.Text, 1, intPos - 1))
If Len(strCustID) > 4 Then
strCustID = Mid(strCustID, 1, 4)
End If
'Add to create 5 characters
strCustID += UCase(Mid(.Text, intPos + 1, 5 - Len(strCustID)))
strCustID = Replace(strCustID, " ", "")
'Remove acutes, punctuation, and non-USASCII characters
Dim strChars As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Dim strChar As String = Nothing
Dim intCtr As Integer
For intCtr = 1 To Len(.Text)
strChar = Mid(strCustID, intCtr, 1)
If InStr(strChars, strChar) = 0 Then
strCustID = Replace(strCustID, strChar, "X")
End If
Next intCtr
'Test for five remaining characters (e.g, Company name = "El Al")
If Len(strCustID) < 5 Then
strCustID += "XXXXX"
strCustID = Mid$(strCustID, 1, 5)
End If
Else
strCustID = UCase(Mid(.Text, 1, 5))
End If
End With
'Test for duplicate CustomerID
'In a production application, an InputBox would allow the
'user to change strCustID and test again for a duplicate.
With cboCustomerID
Dim strHelp As String = vbCrLf + vbCrLf + _
"(Change 'Systems' to 'Enterprises' or the like to add the customer.)"
Dim blnIsDup As Boolean
Dim intCtr As Integer
'V3Final: Can't search combo box items when bound to a DataTable
'If Mid(.Items(intCtr).ToString, 1, 5) = strCustID Then
'Returns "System.Windows.Forms.ComboBox, Items.Count = 94"
For intCtr = 0 To .Items.Count - 1
Dim drvCustID As DataRowView = CType(.Items(intCtr), DataRowView)
With drvCustID.Row
If .Item(0).ToString = strCustID Then
CompanyNameTextBox.Focus()
Dim strMsg As String = "CustomerID '" + strCustID + _
"' duplicates existing entry '" + .Item(1).ToString + "." + strHelp
MsgBox(strMsg, MsgBoxStyle.Exclamation, strTitle)
blnIsDup = True
Exit For
End If
End With
Next intCtr
'V3Final: Added server test for duplicate
If Not blnIsDup Then
'Function is in OrderFormV3.vb
blnIsDup = CheckServerForCustID(strCustID)
If blnIsDup Then
CompanyNameTextBox.Focus()
Dim strMsg As String = "CustomerID '" + strCustID + _
"' duplicates existing entry in Customers table." + strHelp
MsgBox(strMsg, MsgBoxStyle.Exclamation, strTitle)
End If
End If
If blnIsDup Then
Exit Sub
End If
'V3Final: Can't add items to a databound list
'.Items.Add(strCustID + " - " + CompanyNameTextBox.Text)
'Add new table row
Dim objNewRow As Object = bsCustsLookup.AddNew()
Dim drvNewRow As DataRowView = CType(objNewRow, DataRowView)
With drvNewRow
.Item(0) = strCustID
.Item(1) = strCustID + " - " + CompanyNameTextBox.Text
.EndEdit()
End With
.SelectedIndex = .Items.Count - 1
'Delete the saved DataSet file to refresh lookups in next session
Dim strFile As String = Application.StartupPath + _
"\LookupsDataSet.xml"
If File.Exists(strFile) Then
File.Delete(strFile)
End If
End With
CustomerIDTextBox.Text = Mid(cboCustomerID.Text, 1, 5)
LockCustTextBoxes(False, True)
'Button setup
btnEditCustData.Enabled = True
btnSaveCustData.Enabled = True
btnCancelCustEdit.Enabled = True
Else
CompanyNameTextBox.Focus()
Dim strMsg As String = "CompanyName is required and must have more than three characters."
MsgBox(strMsg, MsgBoxStyle.Exclamation, strTitle)
End If
End If
End Sub
#End Region
#Region "Orders Buttons Event Handlers"
'**************************************
'Orders edit buttons event handlers:
'btnEditOrders, btnNewOrder,
'btnSaveOrderEdits, btnCancelOrderEdits
'**************************************
Private Sub btnEditOrders_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnEditOrders.Click
'Enable the DataGridView controls
EnableOrdersGrid(True, False)
EnableOrder_DetailsGrid(True, False)
btnSaveOrders.Enabled = True
btnCancelOrderEdits.Enabled = True
With OrdersDataGridView
'Set the focus to the first row
.CurrentCell = .Rows(0).Cells(0)
.Focus()
End With
End Sub
Private Sub btnNewOrder_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnNewOrder.Click
'Add a new Orders row programmatically
EnableOrdersGrid(True, False)
With OrdersBindingSource
.AddNew()
.MoveLast()
End With
With OrdersDataGridView
.Focus()
'Rows.Count includes the default new row
Dim rowAdded As DataGridViewRow = .Rows(.Rows.Count - 2)
'Add the default values
SetDefaultOrderValues(rowAdded)
End With
blnIsNewOrderRow = True
btnCancelOrderEdits.Enabled = True
btnSaveOrders.Enabled = False
'Add a new OrderDetails row
EnableOrder_DetailsGrid(True, False)
With FK_Order_Details_OrdersBindingSource
.AddNew()
.MoveLast()
End With
With Order_DetailsDataGridView
Dim rowAdded As DataGridViewRow = .Rows(.Rows.Count - 2)
'Add the default values
SetDefaultDetailsValues(rowAdded)
End With
btnNewOrder.Enabled = False
If blnUseTabs Then
If tabOrders.TabPages.Count = 1 Then
tabOrders.TabPages.Add(pagEditOrder)
End If
tabOrders.SelectedTab = pagEditOrder
'blnIsNewOrderRow = False
EmployeeIDTextBox.Focus()
End If
pagEditOrder.Text = "Edit New Order"
End Sub
Private Sub btnSaveOrders_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnSaveOrders.Click
'TODO: Save changes to Orders and Order Details tables
Try
'V3Final: Enforce business rules
'Test for at least one line item
Dim strMsg As String
If Order_DetailsBindingSource.Count < 1 Then
strMsg = "An new order must have at least one line item. " + _
"Please add a line item or click Cancel All Changes."
MsgBox(strMsg, MsgBoxStyle.Exclamation, strTitle)
Return
End If
'Test for $0.00 as UnitPrice
Dim intRow As Integer
strMsg = "A UnitPrice of $0.00 isn't permitted. Please edit line "
With Order_DetailsDataGridView1
For intRow = 0 To .Rows.Count - 2
If CDec(.Rows(intRow).Cells(3).Value) = 0D Then
strMsg += (intRow + 1).ToString + "."
MsgBox(strMsg, MsgBoxStyle.Exclamation, strTitle)
Return
End If
Next
End With
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?