Aplicación Para PocketPC
Ejemplo de manejo de controles y almacenamiento de datos con archivos XML

Fecha: 28/Ene/2005 (25 de Enero del 2005)
Autor: David Fúnez (
[email protected])

 

 



Esta es una pequeña App que lleva el control de “Libros Prestados” para uso personal. La App consta de un Menú y un Form en el cual se llevan los movimientos. Esta App tiene como finalidad mostrar el uso principalmente del DataGrid con sus limitaciones de Compact Framework y del almacenamiento de datos con archivos XML. “Todas las marcas y logos son propiedad de sus respectivos dueños..” El Form de menú principal esta compuesto de dos opciones, una para llamar al Form de “Libros Prestados” y otro para Salir de la App.

El Form de menú principal esta compuesto de dos opciones, una para llamar al Form de “Libros Prestados” y otro para Salir de la App.

El código utilizado para elaborar el menú es igual que el de un Windows Form:

'Opciones del menú

Private Sub MenuItem4_Click( ByVal sender _

    As System.Object, ByVal e As System.EventArgs) _

    Handles MenuItem4.Click

        Dim frm As New Form1

        frm.Show ()

    End Sub

 

    Private Sub MenuItem5_Click( ByVal sender _

    As System.Object, ByVal e As System.EventArgs) _

    Handles MenuItem5.Click

        Me.Close ()

End Sub

 El Form de “Libros Prestados”:

 Como el DataGrid del CF no tiene la misma funcionalidad les voy a explicar las que he encontrado:

-         No es Modificable en modo de ejecución [no se puede editar una celda directamente]

-         Como no tiene DataMember es necesario asignarle el origen de datos al DataSource

-         Para poder editar una celda del DataGrid se utilizó el TextBox donde por medio de una rutina, cuando se ubique el cursor en una celda, el contenido aparecerá en el TextBox para ser editado y posteriormente para mostrar los cambios en el Datagrid pulsaremos el Botón “Editar Celda Seleccionada” que mediante otra rutina los cambios se reflejen en el DataGrid.

A continuación le muestro el código documentado:

 Dim dsLibros As New DataSet

    Dim dt As New DataTable

    Dim xmlFile As String = "libros.xml"

    Dim xsdFile As String = "libros.xsd"

 

    'Esta rutina es para saber la dirección de la aplicación en el

    'dispositivo móvil, en tu dispositivo móvil el directorio donde

    'se instalará la aplicación será "\Program Files\TuApp"

    Dim path As String = System.IO.Path.GetDirectoryName ( _

    System.Reflection.Assembly.GetExecutingAssembly ().GetName().CodeBase)

 

    Private Sub Form1_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ' Verificamos que los archivos de datos se encuentren en

        ' " \Program Files\TuApp"

        If File.Exists (path & "\" & xmlFile) Then

            ' Creamos los FileStream del archivo XML y XSD

            Dim FsXML As New FileStream (path & "\" & xmlFile, FileMode.Open)

            Dim FsXSD As New FileStream (path & "\" & xsdFile, FileMode.Open)

 

            ' Carga el esquema en el DataSet.

            Dim xtrXSD As New XmlTextReader (FsXSD)

            dsLibros.ReadXmlSchema (xtrXSD)

            xtrXSD.Close ()

            FsXSD.Close ()

 

            ' Carga la data en el DataSet.

            Dim xtrXML As New XmlTextReader (FsXML)

            dsLibros.ReadXml (xtrXML)

            xtrXML.Close ()

            FsXML.Close ()

 

            ' Como los DataGrid del Compact Framework no tienen

            ' [ DataMember ] se le asigna el origen de datos

            ' directamente en el DataSource

            dt = dsLibros.Tables(0)

            dgLibros.DataSource = dt

        Else

            MsgBox ("no encontró el archivo", MsgBoxStyle.Critical)

        End If

    End Sub

 

    ' Cuando ubicamos el cursor sobre una celda especifica

    ' el contenido de esta aparece en el TextBox para ser modificado.

    Private Sub dgLibros_CurrentCellChanged( ByVal sender As Object, ByVal e As System.EventArgs) Handles dgLibros.CurrentCellChanged

        Dim currentCell As DataGridCell

        Dim currentCellData As String

 

        ' Se obtiene la celda actual.

        currentCell = dgLibros.CurrentCell

 

        ' Se obtiene la data de la celda actual.

        currentCellData = CStr (dgLibros(currentCell.RowNumber, currentCell.ColumnNumber))

 

        ' Al TextBox se le asigna el valor de la celda actual.

        TextBox1.Text = currentCellData

    End Sub

 

    ' Como no es posible editar directamente un DataGrid fue necesario

    ' utilizar un TextBox y el botón para editar el contenido de la celda.

    Private Sub btnEditaCelda_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEditaCelda.Click

        Dim currentCell As DataGridCell

        Dim currentCellData As String

 

        ' Se obtiene el texto a poner en la celda actual.

        currentCellData = TextBox1.Text

 

        ' Se obtiene la celda actual.

        currentCell = dgLibros.CurrentCell

 

        ' Se asigna la data a la celda actual.

        dgLibros ( currentCell.RowNumber , currentCell.ColumnNumber) = currentCellData

     End Sub

 

    ' Elimina la fila actual.

    Private Sub btnEliminar_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminar.Click

        ' Verifica que hayan filas que para eliminar

        If dsLibros.Tables (0).Rows.Count > 0 Then

            dsLibros.Tables (0).Rows.RemoveAt(dgLibros.CurrentCell.RowNumber)

 

            MsgBox ( "Data Eliminada", MsgBoxStyle.Information)

        Else

            MsgBox ("No hay filas que eliminar", MsgBoxStyle.Information)

        End If

    End Sub

 

    ' Agrega una fila nueva al DataGrid.

    Private Sub btnAgregar_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregar.Click

        Dim maxRowNumber As Integer

        Dim dataRow As DataRow

        Dim index As Integer

        Dim columnName As String

 

        ' Incrementa el número de filas.

        maxRowNumber += 1

 

        ' Crea una nueva fila para la DataTable.

        dataRow = dsLibros.Tables(0).NewRow

 

        ' Agrega data en cada columna en la nueva fila,

        ' para visibilidad

        For index = 0 To dsLibros.Tables (0).Columns.Count - 1

            columnName = dsLibros.Tables(0).Columns(index).ColumnName

            dataRow (columnName) = "R " + maxRowNumber.ToString() + ", " + columnName

        Next index

 

        dsLibros.Tables (0).Rows.Add(dataRow)

    End Sub

 

    ' Guarda los cambios hechos al DataGrid

    Private Sub btnSalvar_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click

        Try

            dsLibros.AcceptChanges ()

            dsLibros.WriteXml (path & "\" & xmlFile)

            MsgBox ("Data Guardada", MsgBoxStyle.Information)

        Catch ex As Exception

            MsgBox ("Error: " & ex.Message, MsgBoxStyle.Critical)

        End Try

    End Sub

 

    ' Salir del Form

    Private Sub btnSalir_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalir.Click

        Me .Close ()

    End Sub

Bueno… espero que al igual que a mi se te hayan despejado algunas dudas con respecto al Compact FrameWork, y al uso sobretodo del DataGrid, te invito a que te bajes la Mobile Application Development ToolKit 2004 http://msdn.microsoft.com/mobility/ aquí encontrarás información referente al desarrollo de aplicaciones Móviles… Este Kit me ayudo mucho en la elaboración de esta App de ejemplo. Saludos y hasta la próxima.


Espacios de nombres usados en el código de este artículo:

System.Xml
System.IO
System.Windows.Form

 


ir al índice

Fichero con el código de ejemplo: dfunez_Aplicacion_Para_PocketPC.zip - 21.4 KB