Braganca@fe.up.pt

XML DataGridView ComboBox

Este exemplo cobre as seguintes àreas :

  • Class
  • Collections
  • Ler e escrever para XML
  • ComboBox simples

Código completo

Form de teste

 

Public Class Form1

 

    Private Sub ButtonWrite2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonWrite2.Click

        Grid2XML(AutoresDataGridView, New Autores, GetType(Autores), Me.TextBoxAuthorFilename.Text)

        Grid2XML(BooksCollectionsDataGridView, New BooksCollections, GetType(BooksCollections), Me.TextBoxBookFilename.Text)

    End Sub

 

    Private Sub ButtonRead2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonRead2.Click

        XML2Grid(AutoresDataGridView, New Autores, GetType(Autores), Me.TextBoxAuthorFilename.Text)

        XML2Grid(BooksCollectionsDataGridView, New BooksCollections, GetType(BooksCollections), Me.TextBoxBookFilename.Text)

    End Sub

 

End Class




Para Criar uma DataGridView com base numa classe tem de criar um objecto da classe

Depois de criada a DataGridView tem de alterar as propriedades da comboBox

Para Copiar os dados da DataGridView para Ficheiro XML (Serialize)

 

Public Function Grid2XML(ByVal DataGridView2XML As DataGridView, ByVal ObjClasse As Object, ByVal CollectionType As System.Type, Optional ByRef FileXML As String = "") As Boolean

 

        Dim TemFile As Boolean = False

        Dim Gravou As Boolean = False

 

        If FileXML = "" Then

            Dim saveFileDialog1 As New SaveFileDialog()

 

            saveFileDialog1.FileName = FileXML

            saveFileDialog1.Filter = "txt files (*.XML)|*.XML|All files (*.*)|*.*"

            saveFileDialog1.FilterIndex = 1

            saveFileDialog1.RestoreDirectory = True

 

            If saveFileDialog1.ShowDialog() = DialogResult.OK Then

                FileXML = saveFileDialog1.FileName

                TemFile = True

            Else

                TemFile = False

            End If

 

        Else

            TemFile = True

 

        End If

 

 

        If TemFile Then

            '----------Serialize

            Dim writer As New System.Xml.Serialization.XmlSerializer(CollectionType)

            Dim file As New System.IO.StreamWriter(FileXML)

 

 

            For Each Temp In DataGridView2XML.DataSource

                ObjClasse.Add(Temp)

            Next

 

            writer.Serialize(file, ObjClasse)

 

            file.Close()

            '----------

            Gravou = True

        Else

            Gravou = False

        End If

 

        Return Gravou

 

    End Function

Para Copiar os dados do Ficheiro XML para DataGridView (Deserialize)

 

Public Function XML2Grid(ByVal DataGridView2XML As DataGridView, ByVal ObjClasse As Object, _

                              ByVal CollectionType As System.Type, Optional ByRef FileXML As String = "") As Boolean

        Dim TemFile As Boolean = False

        Dim Leu As Boolean = False

 

        If FileXML = "" Then

 

 

            Dim OpenFileDialog1 As New OpenFileDialog()

 

            OpenFileDialog1.FileName = FileXML

            OpenFileDialog1.Filter = "txt files (*.XML)|*.XML|All files (*.*)|*.*"

            OpenFileDialog1.FilterIndex = 1

            OpenFileDialog1.RestoreDirectory = True

 

            If OpenFileDialog1.ShowDialog() = DialogResult.OK Then

 

                FileXML = OpenFileDialog1.FileName

                TemFile = True

            Else

                TemFile = False

            End If

        Else

            TemFile = True

 

        End If

 

        If TemFile Then

            Try

                '----------Deserialize

                Dim TempColl As New Object

                Dim reader As New System.Xml.Serialization.XmlSerializer(CollectionType)

                Dim file As New System.IO.StreamReader(FileXML)

 

                TempColl = reader.Deserialize(file)

 

                file.Close()

                '----------

 

 

                DataGridView2XML.DataSource.Clear()

                For Each Temp In TempColl

                    DataGridView2XML.DataSource.Add(Temp)

                Next

 

 

                Leu = True

            Catch ex As Exception

                MsgBox(ex.Message.ToString)

 

 

                Leu = False

            End Try

 

        Else

            Leu = False

        End If

 

        Return Leu

 

    End Function