viernes, 27 de julio de 2012

Reproducir archivos de audio en aplicaciones VB.NET

A la hora de crear aplicaciones, en mi caso, me gusta que sean muy personalizadas. Una de tantas maneras de hacerlo es reproduciendo archivos audio diferentes al iniciar o durante ejecución del programa.


El código es ;


Try
Dim ruta As String 

ruta = My.Application.Info.DirectoryPath & "\hola.wav"

My.Computer.Audio.Play(ruta, AudioPlayMode.Background)

My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Asterisk)

Catch ex As Exception
End Try



La descripción es la siguiente ;

Dim ruta As String variable para almacenar la ruta del archivo

My.Application.Info.DirectoryPath  es la ruta desde donde se ejecuta la aplicación, en este caso "hola.wav" se encuentra en la carpeta debug del proyecto.

My.Computer.Audio.Play(ruta, AudioPlayMode.Background) reproduce el archivo de audio, exiten 3 modos de reproducción.

  1. AudioPlayMode.Background 
    • reproducir el sonido en segundo plano
  2. AudioPlayMode.BackgroundLoop
    • reproduce el sonido en segundo plano hasta que se llame el método My.Computer.Audio.Stop()
  3. AudioPlayMode.WaitToComplete
    • Reproduce el sonido hasta que finaliza la reproducción.
My.Computer.Audio.PlaySystemSound() Reproduce sonidos del sistema.


Espero sea de mucha utilidad!!! :)

miércoles, 25 de julio de 2012

Uso básico Datagridview (DataSet y XML)

A continuación, como llenar de datos un datagridview por medio de un dataset en visual studio 2010 (VB.NET) y guardar los datos en un archivo XML.

La idea es cargar un datagridview con datos manualmente, guardarlos en un archivo XML y cargar otro datagridview con ese mismo archivo.

los pasos son:
  1. Crear un formulario y agregar lo siguiente;
    • 2 datagridview
    • 1 button
  2. El resultado será


  3. Crear una clase llamada XML, la cuál tendrá el siguiente código;

Imports System.IO
Imports System.Xml

Public Class xml

#Region "Members"
    Private xmlDataSet As New DataSet
    'Dirección de donde se creará el archivo, en este caso, es donde se ejecuta     la aplicación.
    Private xmlFile As String = Application.StartupPath + "\clientes.xml"
    Private columns() As String ' Nombre de las columnas
#End Region


Public Sub WriteXmlToFile(ByVal lista As DataGridView)
Try
 Dim ds As New DataSet
 ds = ConvertToTable(lista)
 If ds Is Nothing Then
     Exit Sub
 End If
 If File.Exists(xmlFile) = True Then'si existe el archivo
     File.Delete(xmlFile) 'Borrar el archivo
 End If
 ' Crear el FileStream para escribir
 Dim myFileStream As New System.IO.FileStream(xmlFile, System.IO.FileMode.Create)

 ' crear un XmlTextWriter con el fileStream.
 Dim myXmlWriter As New System.Xml.XmlTextWriter(myFileStream,    System.Text.Encoding.Unicode)

 ' escribir los datos con el método  WriteXml 
 ds.WriteXml(myXmlWriter)'Crear el archivo

Catch ex As Exception
 MessageBox.Show(Err.Description)
Finally
 myXmlWriter.Close()
End Try
End Sub 

Public Sub LoadProcess(ByRef dtv As DataGridView)
 If File.Exists(xmlFile) = False Then
    Exit Sub
 End If
    xmlDataSet = ReadXML() 'Se le asigna un dataset
 Dim filas As Integer = xmlDataSet.Tables(0).Rows.Count - 1
    If filas < 0 Then
       Exit Sub
    End If
       colum()
       dtv.Rows.Clear() 'Limpiar las filas del grid
        For i As Integer = 0 To filas 'Recorrer filas del dataset
            Dim nombre As String = xmlDataSet.Tables(0).Rows(i)(columns(0))
            Dim apellido1 As String = xmlDataSet.Tables(0).Rows(i)(columns(1))
            Dim apellido2 As String = xmlDataSet.Tables(0).Rows(i)(columns(2))
            dtv.Rows.Add(nombre, apellido1, apellido2)
        Next
End Sub 

'Convertir las filas del datagridview en un dataset
    Private Function ConvertToTable(ByVal dgv As DataGridView) As DataSet

        Dim dt As New DataTable()
        ReDim columns(2)
        columns(0) = "Nombre"
        columns(1) = "Primer apellido"
        columns(2) = "Segundo apellido"
        'agregar las columnas al datatable
        dt.Columns.Add(columns(0))
        dt.Columns.Add(columns(1))
        dt.Columns.Add(columns(2))
        'agregar las filas del datagridview
        For Each row As DataGridViewRow In dgv.Rows
            Dim rowdt As DataRow = dt.NewRow()
            rowdt(columns(0)) = Convert.ToString(row.Cells(0).Value)
            rowdt(columns(1)) = Convert.ToString(row.Cells(1).Value)
            rowdt(columns(2)) = Convert.ToString(row.Cells(2).Value)
            dt.Rows.Add(rowdt)   'agregar la fila al datatable
        Next
        Dim ds As New DataSet
        ds.Tables.Add(dt)   'asignar el datatable al dataset
        Return ds
    End Function

' Cargar los datos del archivo XML a un dataset
 Private Function ReadXML() As DataSet 
   Dim ds As New DataSet
   Dim FileSXML As New System.IO.FileStream(xmlFile, System.IO.FileMode.Open)
    Try
      ds.ReadXml(FileSXML)
      ReadXML = ds
      Return ds
    Catch ex As Exception
      MessageBox.Show(Err.Description)
    Finally
      FileSXML .Close()
    End Try
    End Function
End Class

4. Una vez hecho lo anterior, en el evento click de los botones se digita el siguiente código;

Private Sub Button1_Click..........
        Dim obj As New xml
        obj.WriteXmlToFile(DataGridView1)
        obj.LoadProcess(DataGridView2)
End Sub

6.  Al final el resultado será:
llenar el grid con datos (izq) y datos cargados al dar click en el botón (derecha)

ESPERO QUE SEA DE MUCHA UTILIDAD!!

lunes, 9 de julio de 2012

Uso básico de Datagridview (DataSet y SQL server 2008)

A continuación,

Como llenar de datos un datagridview por medio de un dataset en visual studio 2010 (VB.NET) y SQL server 2008.

Lo haré de dos formas.
  1. Asignando a la propiedad de la tabla source el dataset
  2. Recorriendo el dataset y agregando los datos a la tabla
Nota: Según microsoft un dataset representa una caché de memoria interna de datos.

Primero tenemos que hacer lo siguiente:

Nota: no necesariamente tienen que poner los mismos nombres es según la necesidad del lector

  1. Crear una base de datos llamada DBEJEMPLO
  2. Crear una una tabla llamada DEPARTAMENTOS con los siguientes 
  • id_departamento nvarchar(5) Unchecked
  • descripcion nvarchar(30) Checked
  1. Crear un nuevo proyecto en visual studio .net llamado LLENARDATAGRIDVIEW
  2. Ir a herramientas y seleccionar una DATAGRIDVIEW y arrastrarlo al formulario FORM1 que se genera automáticamente.
  3. Crear FORM2, agregarle un DATAGRIDVIEW  y además Crearle dos columnas.
  4. Hasta aquí tendremos:
datagridview

5.
Creamos una clase llamada DATOS

Nota: La programación del código es orientada a objetos, no estructurada.

6. La clase tendrá el siguiente código:

Imports System.Data
Imports System.Data.SqlClient
Public Class datos 
    private ServerName As String = "."    'Nombre del servidor local, pueden escribir ".", si no les funciona escriban el nombre completo, por ejemplo: "EVELYN-PC\SQLEXPRESS"
     private  DBname As String = "DBEJEMPLO" ' Nombre de la base de datos
     private  sqlstringConexion As String = "Data Source=" + Servername + ";Initial Catalog=" + DBname + ";Integrated Security=True"
     private  Sqlconexion As New SqlClient.SqlConnection(sqlstringConexion) ' asigna la conexion de la base de datos con string de la conexion
     private  SqlCommand As SqlClient.SqlCommand
     private  Sqldapter As New SqlClient.SqlDataAdapter
     private  SqlDataAdapter As SqlDataAdapter

  Private Function CargarDataset(ByVal SqlString As String, ByVal tabla As String) As DataSet
        Try
            Dim SQLdataset As New DataSet
            Sqlconexion.Open()
            Sqldapter = New SqlDataAdapter(SqlString, Sqlconexion)
            Sqldapter.Fill(SQLdataset, tabla)
            Return SQLdataset
        Catch ex As Exception
            Return Nothing
            MessageBox.Show("No se pudo completar la operación, intente de verificar la conexión a la base de datos.", "Fallo conexión a la base de datos", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            Sqlconexion.Close()
        End Try
    End Function

    Public Sub Cargargrid(ByVal formulario As String, ByRef dtg As DataGridView)
        Try
            Dim tabla As String = "departamentos"
           Dim SqlString As String = "select a.id_departamento as Código, a.descripcion as Departamento from  " + tabla + " a"
            Dim ds As DataSet = CargarDataset(SqlString, tabla)

            If ds Is Nothing Then
                Exit Sub
            End If

            Select Case formulario
                Case "Forma 1"
                    CargarForma1(ds, dtg, tabla)
                Case "Forma 2"
                    CargarForma2(ds, dtg, tabla)
                Case Else
                    Exit Sub
            End Select
       Catch ex As Exception
           MessageBox.Show(Err.Description)
        End Try
    End Sub 

    Private Sub CargarForma1(ByVal ds As DataSet, ByRef dtg As DataGridView, ByVal tabla As String)
        Try
            Dim n As Integer ' variables para el for
            Dim fila As DataGridViewRow ' representa una fila del datagridview
            ' ciclo para limpiar el datagrid de cualquier dato y evitar que se repitan
            If dtg.Rows.Count > 0 Then
                For n = dtg.Rows.Count - 2 To 0 Step -1
                    fila = dtg.Rows(n)
                    dtg.Rows.Remove(fila) ' Eliminamos la fila de la colección
                Next
            End If

            dtg.DataSource = Nothing ' limpiar el datasourse
            dtg.Refresh() ' actualizar
            dtg.DataSource = ds ' asignar en la memoria la tabla
            dtg.DataMember = tabla ' asignar la tabla escogida
         Catch ex As Exception
           MessageBox.Show(Err.Description)
        End Try
    End Sub 

Private Sub CargarForma2(ByVal ds As DataSet, ByRef dtg As DataGridView, ByVal tabla As String)
        Try
            If dtg.Rows.Count > 0 Then
                dtg.Rows.Clear() 'limpiar el datagridview
            End If
            Dim filas As Integer = ds.Tables(tabla).Rows.Count - 1 ' verificamos que existan datos
            If filas < 0 Then
                Exit Sub
            End If
            Dim Codigo As String 
            Dim descripcion As String 
            For i As Integer = 0 To filas ' recorrer las filas del dataset cargado
               Codigo = ds.Tables(tabla).Rows(i)(0)
               descripcion  = ds.Tables(tabla).Rows(i)(1)
               dtg.Rows.Add(Codigo, descripcion)
            Next
      Catch ex As Exception
            MessageBox.Show(Err.Description, "Fallo conexión a la base de datos", MessageBoxButtons.OK, messageBoxIcon.Error)
    End Try
    End Sub 
End Class

7. Agregamos un botón para cargar los datos y en el evento click del botón, colocamos el siguiente código.

        Dim objetoDatos As New datos   ' instanciar un objeto de la clase datos
        objetoDatos.Cargargrid("Forma 2", DataGridView1)

Nota: El "Forma 1" o "Forma 2" depende del formulario del que se llama al método

8. Corremos la aplicación y el resultado será:



Espero que les sea de utilidad...!! :)