salesordersbe.vb

来自「wrox出版社的另一套经典的VB2005数据库编程学习书籍,收集了书中源码,郑重」· VB 代码 · 共 380 行 · 第 1/2 页

VB
380
字号
Imports System.Web.Services.protocols
Imports System.Collections
Imports System.Collections.Generic
Imports System.ComponentModel
Public Class SalesOrdersBE

    Private wsOrders As New WSOrdersBE.WSOrdersBE
	Private blnIsLoading As Boolean
	Private blnIsLoaded As Boolean
    Private lstDetailsCopy As New BindingList(Of WSOrdersBE.OrderDetail)

	'*******************************
	'DataGridView loading procedures
	'*******************************

	Private Sub btnLoadGrids_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoadGrids.Click
		blnIsLoading = True
		Me.Cursor = Cursors.WaitCursor
        Dim objOrders() As WSOrdersBE.SalesOrder
		Dim lngTicks As Long = Now.Ticks
		Try
			If optGetTopOrders.Checked Then
				If CType(txtTop.Text, Integer) > 25 Then
					ResetAutoSizeColumns(True)
				Else
					ResetAutoSizeColumns(False)
                End If
                objOrders = wsOrders.GetTopSalesOrders(CType(txtTop.Text, Integer))
			ElseIf optGetCustOrders.Checked Then
				ResetAutoSizeColumns(False)
				txtCustID.Text = txtCustID.Text.ToUpper
				objOrders = wsOrders.GetSalesOrdersByCustomerID(txtCustID.Text)
			Else
				ResetAutoSizeColumns(True)
				objOrders = wsOrders.GetAllSalesOrders
			End If
			lngTicks = Now.Ticks - lngTicks
			txtData.Text = Format(lngTicks / 10000000, "#0.000")
            Application.DoEvents()
            Dim intRow As Integer
            lngTicks = Now.Ticks
            SalesOrderBindingSource.Clear()
            SalesOrderDetailsBindingSource.Clear()
            'Suspend/ResumeLayout for improved performance
            SalesOrderDataGridView.SuspendLayout()
            With SalesOrderBindingSource
                'Application.DoEvents()
                Dim lstDetails As New BindingList(Of WSOrdersBE.OrderDetail)
                'lstDetails.Clear()
                For intRow = 0 To objOrders.Length - 1
                    'Add the SalesOrders object
                    .Add(objOrders(intRow))

                    Dim objDtls As WSOrdersBE.OrderDetail()
                    objDtls = objOrders(intRow).OrderDetails
                    Dim intItem As Integer
                    For intItem = 0 To objDtls.Length - 1
                        lstDetails.Add(objOrders(intRow).OrderDetails(intItem))
                        'Populate the copy
                        lstDetailsCopy.Add(objOrders(intRow).OrderDetails(intItem))
                    Next
                Next
                .AllowNew = True
                With SalesOrderDetailsBindingSource
                    'Add the OrderDetails
                    .DataMember = ""
                    .DataSource = lstDetails
                    .AllowNew = False
                End With
            End With
            SalesOrderDataGridView.ResumeLayout()
            SalesOrderDataGridView.Rows(0).Selected = True
            Application.DoEvents()
            lngTicks = Now.Ticks - lngTicks
            txtGrids.Text = Format(lngTicks / 10000000, "#0.000")
            BindingNavigatorSaveItem.Enabled = False
            BindingNavigatorDeleteItem.Enabled = False
            BindingNavigatorAddNewItem.Enabled = True
        Catch excSoap As SoapException
            MsgBox(excSoap.Message, MsgBoxStyle.Information, "SOAP Exception")
        Catch excOther As Exception
            MsgBox(excOther.Message, MsgBoxStyle.Information, "Other Exception (Not SOAP)")
        Finally
            Me.Cursor = Cursors.Default
            blnIsLoading = False
            blnIsLoaded = True
        End Try
    End Sub

    Private Sub ResetAutoSizeColumns(ByVal blnReset As Boolean)
        'Autosizing columns causes a performance hit on large loads
        Dim intCol As Integer
        With SalesOrderDataGridView
            For intCol = 0 To .Columns.Count - 1
                .Columns(intCol).DefaultCellStyle.WrapMode = DataGridViewTriState.False
                .Columns(intCol).SortMode = DataGridViewColumnSortMode.NotSortable
                If blnReset Then
                    .Columns(intCol).AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader
                Else
                    If intCol > 7 Then
                        .Columns(intCol).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
                    Else
                        .Columns(intCol).AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader
                    End If
                End If
            Next
        End With
    End Sub

    Private Sub SalesOrderDataGridView_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles SalesOrderDataGridView.SelectionChanged
        'Display OrderDetails for the selected Order and enable editing the grids
        With SalesOrderDataGridView
            If .SelectedRows.Count > 0 Then
                Dim intSelRow As Integer = .SelectedRows(0).Index
                Dim intOrderID As Integer = CType(.SelectedRows(0).Cells(0).Value, Integer)
                If intOrderID > 0 Then
                    blnIsLoading = True
                    Dim lstDetails As New BindingList(Of WSOrdersBE.OrderDetail) 'or ArrayList
                    Dim lngTicks As Long = Now.Ticks
                    'Copy the related rows to lstDetails
                    With lstDetailsCopy
                        Dim intRow As Integer
                        Dim blnFound As Boolean
                        For intRow = 0 To .Count - 1
                            If .Item(intRow).OrderID = intOrderID Then
                                lstDetails.Add(.Item(intRow))
                                blnFound = True
                            Else
                                If blnFound Then
                                    blnFound = False
                                    Exit For
                                End If
                            End If
                        Next
                    End With
                    lngTicks = Now.Ticks - lngTicks
                    txtData.Text = Format(lngTicks / 10000000, "#0.000")
                    lngTicks = Now.Ticks
                    With SalesOrderBindingSource
                        .AllowNew = True
                    End With
                    With SalesOrderDetailsBindingSource
                        'Add the OrderDetails for the order
                        .Clear()
                        .DataMember = ""
                        .DataSource = lstDetails
                        lngTicks = Now.Ticks - lngTicks
                        txtGrids.Text = Format(lngTicks / 10000000, "#0.000")
                        BindingNavigatorSaveItem.Enabled = True
                        BindingNavigatorDeleteItem.Enabled = True
                        'Enable details editing
                        .AllowNew = True
                    End With
                    blnIsLoading = False
                End If
                .Rows(intSelRow).Selected = True
            End If
        End With
    End Sub

    '*********************************************
    'Add, edit, delete and save SalesOrder objects
    '*********************************************

    Private Sub BindingNavigatorAddNewItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BindingNavigatorAddNewItem.Click
        BindingNavigatorSaveItem.Enabled = True
        SalesOrderBindingSource.MoveLast()
        SalesOrderDetailsBindingSource.Clear()
    End Sub

    Private Sub SalesOrderBindingSource_AddingNew(ByVal sender As Object, ByVal e As System.ComponentModel.AddingNewEventArgs) Handles SalesOrderBindingSource.AddingNew
        'Add default values (for convenience)
        If blnIsLoaded Then
            Dim objNew As New WSOrdersBE.SalesOrder
            With objNew
                .CustomerID = "RATTC"
                .EmployeeID = 2
                .OrderDate = Today
                .RequiredDate = Today.AddDays(14)
                .ShippedDate = #12:00:00 AM#
                .ShipVia = 2
                .Freight = 0D
                .ShipName = "Rattlesnake Canyon Grocery"
                .ShipAddress = "2817 Milton Dr."
                .ShipCity = "Albuquerque"
                .ShipRegion = "NM"
                .ShipPostalCode = "87110"
                .ShipCountry = "USA"
            End With
            e.NewObject = objNew

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?