📄 editform.vb
字号:
Imports System.Xml.Serialization
Imports System.ComponentModel
Imports System.IO
Public Class frmEdit
Private blnIsLoaded As Boolean
Private objNwind As Northwind
Private blOrders As BindingList(Of NorthwindOrders)
'Private blvOrders As BindingListView(Of NorthwindOrders)
Private Const strIEFile As String = "\Program Files\Internet Explorer\Iexplore.exe"
Private strPath As String
Private strFile As String
Private strCustomerID As String
Private intOrderID As Integer
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If File.Exists("..\Output.xml") Then
File.Delete("..\Output.xml")
End If
End Sub
Private Sub btnLoadData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoadData.Click
Try
Dim lngTicks As Long = Now.Ticks
blnIsLoaded = False
Me.Cursor = Cursors.WaitCursor
'Hydrate the NorthwindDS object by deserializing it
objNwind = New Northwind
Dim xsInput As New XmlSerializer(objNwind.GetType)
Dim fsInput As New FileStream("..\Northwind.xml", FileMode.Open)
objNwind = CType(xsInput.Deserialize(fsInput), Northwind)
fsInput.Close()
Dim dblDeserialize As Double = (Now.Ticks - lngTicks) / 10000000
With NorthwindCustomersBindingSource
.Clear()
.DataSource = objNwind.Customers
'Unfortunately, sorting and filtering aren't supported on BindingSources
'created from BindingLists
Dim blnSort As Boolean = .SupportsSorting ' returns False
Dim blnFilter As Boolean = .SupportsFiltering 'returns False
With NorthwindCustomersDataGridView
.DataSource = NorthwindCustomersBindingSource
End With
strCustomerID = CType(.Current, NorthwindCustomers).CustomerID
End With
Application.DoEvents()
With NorthwindOrdersBindingSource
.Clear()
.DataSource = objNwind.Orders
FilterOrders()
With NorthwindOrdersDataGridView
.DataSource = NorthwindOrdersBindingSource
End With
intOrderID = CType(.Current, NorthwindOrders).OrderID
End With
Application.DoEvents()
With NorthwindOrder_DetailsBindingSource
.Clear()
Application.DoEvents()
.DataSource = objNwind.Order_Details
FilterOrder_Details()
With NorthwindOrder_DetailsDataGridView
.DataSource = NorthwindOrder_DetailsBindingSource
End With
End With
Me.Cursor = Cursors.Default
blnIsLoaded = True
lngTicks = Now.Ticks - lngTicks
txtTime.Text = Format(lngTicks / 10000000, "0.00")
Catch exc As Exception
Me.Cursor = Cursors.Default
MsgBox(exc.Message)
End Try
End Sub
Private Sub FilterCustomer()
With NorthwindCustomersBindingSource
Dim intRow As Integer
For intRow = 0 To .Count - 1
If CType(.Current, NorthwindCustomers).CustomerID <> strCustomerID Then
.RemoveCurrent()
Else
.MoveNext()
End If
Next intRow
.MoveFirst()
End With
End Sub
Private Sub FilterOrders()
With NorthwindOrdersBindingSource
Dim intRow As Integer
For intRow = 0 To .Count - 1
If CType(.Current, NorthwindOrders).CustomerID <> strCustomerID Then
.RemoveCurrent()
Else
.MoveNext()
End If
Next intRow
.MoveFirst()
End With
End Sub
Private Sub FilterOrder()
With NorthwindOrdersBindingSource
Dim intRow As Integer
For intRow = 0 To .Count - 1
If CType(.Current, NorthwindOrders).OrderID <> intOrderID Then
.RemoveCurrent()
Else
.MoveNext()
End If
Next intRow
.MoveFirst()
End With
End Sub
Private Sub FilterOrder_Details()
With NorthwindOrder_DetailsBindingSource
Dim intRow As Integer
For intRow = 0 To .Count - 1
If CType(.Current, NorthwindOrder_Details).OrderID <> intOrderID Then
.RemoveCurrent()
Else
.MoveNext()
End If
Next intRow
.MoveFirst()
End With
End Sub
Private Sub NorthwindCustomersBindingSource_CurrentChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles NorthwindCustomersBindingSource.CurrentChanged
If blnIsLoaded Then
With NorthwindCustomersBindingSource
strCustomerID = CType(.Current, NorthwindCustomers).CustomerID
FilterOrders()
End With
End If
End Sub
Private Sub NorthwindOrdersBindingSource_CurrentChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles NorthwindOrdersBindingSource.CurrentChanged
If blnIsLoaded Then
blnIsLoaded = False
With NorthwindOrdersBindingSource
intOrderID = CType(.Current, NorthwindOrders).OrderID
.Clear()
objNwind = New Northwind
Dim xsInput As New XmlSerializer(objNwind.GetType)
Dim fsInput As New FileStream("..\Northwind.xml", FileMode.Open)
objNwind = CType(xsInput.Deserialize(fsInput), Northwind)
fsInput.Close()
.DataSource = objNwind.Orders
FilterOrders()
With NorthwindOrder_DetailsBindingSource
.Clear()
.DataSource = objNwind.Order_Details
End With
FilterOrder_Details()
End With
blnIsLoaded = True
End If
End Sub
Private Sub btnSaveData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSaveData.Click
blnIsLoaded = False
'Filter results to a single customer and order
FilterCustomer()
FilterOrder()
Application.DoEvents()
'End the edits
NorthwindCustomersBindingSource.EndEdit()
NorthwindOrdersBindingSource.EndEdit()
NorthwindOrder_DetailsBindingSource.EndEdit()
Try
'Dehydrate the Northwind object by serializing it to Output.xml
Dim xsOutput As New XmlSerializer(objNwind.GetType)
Dim srOutput As New StreamWriter("..\Output.xml")
xsOutput.Serialize(srOutput, objNwind)
srOutput.Close()
If File.Exists(strIEFile) And File.Exists("..\Output.xml") Then
strPath = Application.StartupPath
strPath = Mid(strPath, 1, strPath.LastIndexOf("\"))
strFile = strPath + "\Output.xml"
Dim strShell As String = """" + strIEFile + """ " + strFile
Shell(strShell, AppWinStyle.NormalFocus)
End If
Catch exc As Exception
MsgBox(exc.Message, MsgBoxStyle.Exclamation, "Serialization Failed")
End Try
End Sub
End Class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -