Makalemizin ikinci bölümünde en kritik noktalardan biri olan objelerimiz ve objelerimizi bir arada tutan collectionlar kavramını işleyeceğiz.. XML yazma ve okuma fonksiyon olarak kolleksiyonumuzda olacak. Kolleksiyonumuz Ordered Dictionary şeklinde class larımızı tutacağız.
Objelerimizde Müşteri Id (Tekil alan), Name, Surname şeklinde olacaktır
1 #Region " Customer"
2 Public Class Customer
3 #Region " Declarations"
4 Private _CustomerNumber As Integer
5 Private _Name As String
6 Private _Surname As String
7 #End Region
8 #Region " Properties"
9 Public Property CustomerNumber() As Integer
10 Get
11 Return _CustomerNumber
12 End Get
13 Set(ByVal value As Integer)
14 _CustomerNumber = value
15 End Set
16 End Property
17 Public Property Name() As String
18 Get
19 Return _Name
20 End Get
21 Set(ByVal value As String)
22 _Name = value
23 End Set
24 End Property
25 Public Property Surname() As String
26 Get
27 Return _Surname
28 End Get
29 Set(ByVal value As String)
30 _Surname = value
31 End Set
32 End Property
33 #End Region
34 End Class
35 #End Region
36 #Region " Customers"
37 Public Class Customers
38 Implements IEnumerable, IEnumerator
39 Dim List As System.Collections.Specialized.OrderedDictionary
40 Dim Position As Integer = -1
41 Public Sub New()
42 List = New System.Collections.Specialized.OrderedDictionary
43
44 End Sub
45 Public Sub Add(ByVal Value As Customer)
46 List.Add(Value.CustomerNumber.ToString, Value)
47 End Sub
48 Default Public ReadOnly Property Item(ByVal Index As Integer) As Customer
49 Get
50 Return CType(List(Index), Customer)
51 End Get
52 End Property
53 Default Public ReadOnly Property Item(ByVal Key As String) As Customer
54 Get
55 Return CType(List(Key), Customer)
56 End Get
57 End Property
58 Public Sub Remove(ByVal Key As String)
59 List.Remove(Key)
60 End Sub
61 Public Sub Remove(ByVal Index As Integer)
62 List.RemoveAt(Index)
63 End Sub
64 Public ReadOnly Property Count() As Integer
65 Get
66 Return List.Count
67 End Get
68 End Property
69 Public Sub Clear()
70 List.Clear()
71 End Sub
72 Public ReadOnly Property Current() As Object Implements System.Collections.IEnumerator.Current
73 Get
74 Return CType(List(Position), Customer)
75 End Get
76 End Property
77 Public Function MoveNext() As Boolean Implements System.Collections.IEnumerator.MoveNext
78 Position += 1
79 Return Position < List.Count
80 End Function
81 Public Sub Reset() Implements System.Collections.IEnumerator.Reset
82 Position = -1
83 End Sub
84 Public Function GetEnumerator() As System.Collections.IEnumerator Implements System.Collections.IEnumerable.GetEnumerator
85 Position = -1
86 Return CType(Me, IEnumerator)
87 End Function
88 Public Sub WriteXML(ByVal XW As Xml.XmlWriter)
89 XW.WriteStartDocument()
90 XW.WriteStartElement("Customers")
91 For Each C As Customer In Me
92 XW.WriteStartElement("Customer")
93 XW.WriteAttributeString("CustomerNumber", C.CustomerNumber.ToString)
94 XW.WriteAttributeString("Name", C.Name)
95 XW.WriteAttributeString("Surname", C.Surname)
96 XW.WriteEndElement()
97 Next
98 XW.WriteEndElement()
99 XW.WriteEndDocument()
100 XW.Flush()
101 XW.Close()
102 End Sub
103 Public Sub ReadXML(ByVal XR As Xml.XmlReader)
104 Me.Clear()
105 While XR.Read
106 Select Case XR.NodeType
107 Case Xml.XmlNodeType.Element
108 Select Case XR.Name
109 Case "Customer"
110 Dim C As New Customer
111 While XR.MoveToNextAttribute
112 With C
113 Select Case XR.Name
114 Case "CustomerNumber"
115 .CustomerNumber = CInt(XR.Value)
116 Case "Name"
117 .Name = XR.Value
118 Case "Surname"
119 .Surname = XR.Value
120 End Select
121 End With
122 End While
123 Me.Add(C)
124 End Select
125 End Select
126 End While
127 XR.Close()
128 End Sub
129 End Class
130 #End Region
İlk formumuzda bir önceki makalemizde yaptığmız listview’I kullanacağız.Form Load olayında Read XML ile bilgilieri kolleksiyona alıp listview I dolduracağız. Listview öğelerinin taglarına müşterilerin numaralarını atayacağız.
2 #Region " Declarations"
3 Dim Customers As New Customers
4 #End Region
5 #Region " frmEvents"
6 Private Sub frmList_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
7 If IO.Directory.Exists("C:\C") Then
8 If IO.File.Exists("C:\C\Customers.Xml") Then
9 Customers.ReadXML(New Xml.XmlTextReader("C:\C\Customers.Xml"))
10 End If
11 Else
12 IO.Directory.CreateDirectory("C:\C")
13 End If
14
15 FillListview()
16 End Sub
17 Private Sub frmList_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
18 Dim XW As New Xml.XmlTextWriter("C:\C\Customers.Xml", System.Text.Encoding.Default)
19 XW.Formatting = Xml.Formatting.Indented
20 Customers.WriteXML(XW)
21 End Sub
22 #End Region
23 #Region " PrivateMethods"
24 Public Sub FillListview()
25 ListView1.Items.Clear()
26 If Customers.Count > 0 Then
27 For Each C As Customer In Customers
28 Dim Li As ListViewItem = ListView1.Items.Add(C.CustomerNumber.ToString)
29 Li.SubItems.Add(C.Name)
30 Li.SubItems.Add(C.Surname)
31 Li.Tag = C.CustomerNumber
32 Next
33 End If
34
35 End Sub
36 #End Region

Devamı bir sonraki makalemizde
Hiç yorum yok:
Yorum Gönder