lunes, 18 de enero de 2010

Aplicación para PocketPC 2 con VB. net

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.

No hay comentarios:

Publicar un comentario