sábado, 29 de junio de 2013

Validar Datagridview

Validar Datagridview

En este ejemplo e trabajado  con
1 Datagridview
2 botones

VB.NET: 

 'funcion para verificar si ya se encuentra dijitado el codigo en el dgv
    Private Sub si_existe_dgv(ByVal e)
        Dim clave As String
        Dim nlinea As Integer
        Select Case e.ColumnIndex
            Case 0
                clave = dgvvalidar.Rows(dgvvalidar.CurrentRow.Index).Cells(0).Value
                nlinea = dgvvalidar.CurrentRow.Index
                For i As Integer = 0 To dgvvalidar.Rows.Count - 1
                    If clave = dgvvalidar.Rows(i).Cells(0).Value And i <> nlinea Then
                        dgvvalidar.Rows(nlinea).Cells(0).Value = ""
                        MsgBox("El codigo digitado ya esta ingresado ",                                                     MsgBoxStyle.Information)                        Exit Sub
                    End If
                Next
        End Select
    End Sub  

 'funcion para especificar tipo de dato ingresado en cell del dgv
    Private Sub validar_Keypress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyP                                 ressEventArgs)
        ' obtener indice de la columna 
        Dim columna As Integer = dgvvalidar.CurrentCell.ColumnIndex

        '' comprobar si la celda en edicin corresponde a la columna 0
        ' en la columna 0  solo acepta  numeros 
        If columna = 0 Then
            ' Obtener caracter 
            Dim caracter As Char = e.KeyChar
            If Not Char.IsNumber(caracter) And (caracter = ChrW(Keys.Back)) = False Then
                'Me.Text = e.KeyChar 
                e.KeyChar = Chr(0)
            End If
        End If

        '' comprobar si la celda en edicin corresponde a la columna 2
        ' en la columna 2  solo acepta  letras
        If columna = 1 Then
            Dim caracter As Char = e.KeyChar
            If Not Char.IsLetter(caracter) And (caracter = ChrW(Keys.Back)) = False Then
                'Me.Text = e.KeyChar 
                e.KeyChar = Chr(0)
            End If
        End If

        '' comprobar si la celda en edicin corresponde a la columna 2
        ' en la columna 2  solo acepta  numeros 
        If columna = 2 Then
            ' Obtener caracter 
            Dim caracter As Char = e.KeyChar
            If Not Char.IsNumber(caracter) And (caracter = ChrW(Keys.Back)) = False Then
                'Me.Text = e.KeyChar 
                e.KeyChar = Chr(0)
            End If
        End If
        '' comprobar si la celda en edicin corresponde a la columna 3
        ' en la columna 3 acepto ademas de numeros un unico "." que es el separador decimal a        '  qui
        If columna = 3 Then
            Dim caracter As Char = e.KeyChar
            ' referencia a la celda 
            Dim txt As TextBox = CType(sender, TextBox)
            ' comprobar si es un nmero con isNumber, si es el backspace, si el caracter 
            ' es el separador decimal, y que no contiene ya el separador 
            If (Char.IsNumber(caracter)) Or _
            (caracter = ChrW(Keys.Back)) Or _
            (caracter = ".") And _
            (txt.Text.Contains(".") = False) Then

                e.Handled = False
            Else
                e.Handled = True
            End If
        End If
    End Sub

 Private Sub dgvvalidar_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvvalidar.CellEndEdit
        si_existe_dgv(e)
    End Sub

    Private Sub dgvvalidar_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles dgvvalidar.EditingControlShowing
        ' referencia a la celda 
        Dim validar As TextBox = CType(e.Control, TextBox)
        ' agregar el controlador de eventos para el KeyPress 
        AddHandler validar.KeyPress, AddressOf validar_Keypress
    End Sub
 Private Sub btadicionar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btadicionar.Click
        'se adiciona una fila en el datagridview
        dgvvalidar.Rows.Add()
        'este es para ponerle un color a las filas
        dgvvalidar.RowsDefaultCellStyle.BackColor = Color.Aquamarine
        dgvvalidar.AlternatingRowsDefaultCellStyle.BackColor = Color.Bisque
    End Sub

    Private Sub btquitar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btquitar.Click
        'para quitar la fila seleccionada
        dgvvalidar.Rows.Remove(dgvvalidar.CurrentRow)
    End Sub
Posted by Fredy Najarro
on 11:17

viernes, 28 de junio de 2013

Introducción a SQL Azure en Español




Descripción:
 SQL Azure es una base de  relaciona en la nube basada sobre la  de SQL Server. Este proporciona  de bases de datos altamente escalables y con alta disponibilidad  y al estar orientada al cloud computing tiene beneficios como la utilización de centro de datos distribuido que proporciona disponibilidad, escalabilidad,  de datos y recuperación automática del .

Videotutoriales de SQL Azure es Español Nº 01 


Videotutoriales de SQL Azure es Español Nº 02
 

Videotutoriales de SQL Azure es Español Nº 03

Videotutoriales de SQL Azure es Español Nº 04

Videotutoriales de SQL Azure es Español Nº 05

Videotutoriales de SQL Azure es Español Nº 06


Posted by Fredy Najarro
on 17:54

Videostutoriales de SQL Server 2008 Español

Videostutoriales de SQL Server 2008 Español
Español | 1.6 Gb|  |  Pass:www.detodoprogramacion.com
Descripcion:
Les dejo estos videos que estan buenos, me ayudaron muchisimo, espero les sirva!

Contenido:
  1. SQLServer mas que un motor de Base de Datos
  2. Recuperar informacion de las tablas
  3. Recuperando informacion de multiples tablas
  4. Instalacion de SQL Server
  5. Proteja sus Datos (Implementen seguridad en SQL Server)
  6.  Centralizad – Basada en Politicas y Auditoria
  7. Implementacion I Objetos de una Base de Datos
  8. Implementacion II Tipos de datos integirdad en sus datos
  9. Implementacion III  de  de flujo
  10. Analysis Services I Analisis de datos con cubos
  11. Haga un Analisis de Datos con Herramientas Faciles de Ocupar
  12. Integrations Services
  13. Administracion y automatizaciones de paquetes SSIS
  14. Reporting Services SQL Server

Capturas:


Descargar(Click en la Imagen)
Fuente :http://www.detodoprogramacion.com/2012/01/videostutoriales-de-sql-server-2008.html
Posted by Fredy Najarro
on 14:12

jueves, 27 de junio de 2013

Ejemplo LINQ + Vb .Net

Introducción

Este ejemplo nos muestra un Formulario de Pedido usando LINQ, por cuestiones de Documentación, es posible que NO ESTE USANDO CORRECTAMENTE todo el potencial de LINQ, asi que espero sugerencias para mejoras, asi mismo debo decirles que hago un abuso de métodos a nivel de formulario las cuales estarían mejor dentro de clases pero creo que para un inicio esto esta bien y cumple con su objetivo.

Modelo de Base de Datos

Bueno me di la libertad de ponerles el esquema de mi base de datos de pruebas que suelo usar para este tipo de ejemplos.
Obviamente los Tipos de Datos funciones y demas, estan dentro del archivo para descargar, asi que no se preocupen, por cierto me olvidaba, estoy usando Ms SQL Server Express.

Agregando el Objeto LINQ to SQL

Lo primero que debemos hacer es presionar la siguiente combinacion de teclas Ctrl + Shift + A, inmediatamente nos aparecera la siguiente ventana en la cual seleccionaremos la opcion el Elemento LINQ to SQL classes, a la cual le pondremos de nombre "bdVentasLinq.dbml".
A continuación lo que debemos hacer es arrastrar todos Nuestras Tablas de la Base de Datos hacia el Elemento LINQ to SQL, el cual debera quedar de la siguiente forma.

Agregando Clase clsDetalleVenta

A continuacióna gregamos un elemento clase y le damos el nombre de clsDetalleVenta, esta clase nos permitira almacenar el Detalle de un Pedido en especifico.
Public Class clsDetalleVenta
    Private idProducto As String
    Private nombreProducto As String
    Private cantidad As Integer
    Private precio As Double
    Private subtotal As Double
    Private stockArticulo As Double

    Public Property _stockArticulo() As Integer
        Get
            Return stockArticulo
        End Get
        Set(ByVal value As Integer)
            stockArticulo = value
        End Set
    End Property

    Public Property _idProducto() As String
        Get
            Return idProducto
        End Get
        Set(ByVal value As String)
            idProducto = value
        End Set
    End Property

    Public Property _nombreProducto() As String
        Get
            Return nombreProducto
        End Get
        Set(ByVal value As String)
            nombreProducto = value
        End Set
    End Property

    Public Property _cantidad() As Integer
        Get
            Return cantidad
        End Get
        Set(ByVal value As Integer)
            cantidad = value
        End Set
    End Property

    Public Property _precio() As Double
        Get
            Return precio
        End Get
        Set(ByVal value As Double)
            precio = value
        End Set
    End Property

    Public Property _subtotal() As Double
        Get
            Return subtotal
        End Get
        Set(ByVal value As Double)
            subtotal = value
        End Set
    End Property
End Class
Y agregamos un modulo donde metere algunas funciones rutinarias, tales como Cuadros de Dialogo y otras cosas que se me ocurran, a este modulo le pondremos como nombre mensajes.
Module mensajes
    Public Sub msginformacion(ByVal mensaje As String)
        MessageBox.Show(mensaje, "Sis. Ventas", MessageBoxButtons.OK, _
                        MessageBoxIcon.Information)
    End Sub

    Public Sub msgerror(ByVal mensaje As String)
        MessageBox.Show("Ocurrio el Error: " & Environment.NewLine _
                        & mensaje, "Sis. Ventas", _
                        MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Sub

    Public Sub msgpregunta(ByVal mensaje As String)
        MessageBox.Show(mensaje, "Sis. Ventas", _
                        MessageBoxButtons.OK, MessageBoxIcon.Question)
    End Sub

End Module

Diseñando el Programa

Diseño del Formulario de Busqueda de Clientes

Ya sabemos que debemos presionar Ctrl + Shift + A, y acontinuacion agregamos un elemento Dialog y le ponemos de nombre frmClientes, el cual luego de agregar los siguientes controles.
  • 1 DataGridView
  • 1 Label
  • 1 TextBox
No menciono los 2 Button ya que etos viene por defecto en el Objeto Dialog, luego de agregados los controles deberia quedar algo asi...

Codificando Nuestro Formulario frmClientes

DataContext:
Se encarga de traducir las peticiones de objetos en consultas SQL (ver el esquema de la arquitectura de LINQ) y devolver los resultados como objetos.
Imports System.Windows.Forms

Public Class frmClientes
    'Instanciamos un objeto de la clase bdVentasLinqDataContext
    Dim bd As New bdVentasLinqDataContext
    'Declaro una variable ID de Forma Publica
    Public id As String
    Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles OK_Button.Click
        'Extraigo el indice del elemento Seleccionado en el DataGridView
        Dim row As Integer = Me.DataGridView1.CurrentRow.Index
        'Extraigo el elemento situado en la columna DNI_cli
        id = Me.DataGridView1.Item("DNI_cli", row).Value.ToString
        'Se establece como OK el resultado del Cuadro de Dialogo
        Me.DialogResult = System.Windows.Forms.DialogResult.OK
        'Cierro el Formulario
        Me.Close()
    End Sub

    Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles Cancel_Button.Click
        'Se establece como CANCEL el resultado del Cuadro de Dialogo
        Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
        'Cierro El formulario
        Me.Close()
    End Sub

    Private Sub Dialog1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles MyBase.Load
        'Este codigo usa una consulta LINQ para obtener una secuencia
        'para obtener una secuencia IEnumerable de objetos Clientes

        Dim query = From cli In bd.Clientes _
                    Select cli.DNI_cli, cli.ape_cli, cli.nom_cli _
                    Order By ape_cli Ascending
        Me.DataGridView1.DataSource = query.ToList
    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles TextBox1.TextChanged
        'Este codigo usa una consulta LINQ para obtener una secuencia
        'para obtener una secuencia IEnumerable de objetos Clientes
        'los cuales concuerden con el texto contenido en la caja de
        'texto TextBox1 la cual se concatena con el caracter *
        'el que nos proporciona la funcionalidad del % en T-SQL
        'Todo esto con la finalidad de ser utilizado con la expresion
        'LIKE de nuestra consulta LINQ

        Dim cadena As String
        cadena = Me.TextBox1.Text & "*"
        Dim query = From cli In bd.Clientes _
                    Where cli.ape_cli Like cadena _
                    Select cli.DNI_cli, cli.ape_cli, cli.nom_cli _
                    Order By ape_cli Ascending
        'Se asocia como Origen de Datos al DataGridView1
        'el resultado de la consulta LINQ
        Me.DataGridView1.DataSource = query.ToList
    End Sub
End Class

 

Diseño del Formulario de Busqueda de Productos

Ya sabemos que debemos presioanr Ctrl + Shift + A, y acontinuacion agregamos un elemento Dialog y le ponemos de nombre frmProductos, el cual luego de agregar los siguientes controles.
  • 1 DataGridView
  • 1 Label
  • 1 TextBox
No menciono los 2 Button ya que etos viene por defecto en el Objeto Dialog, luego de agregados los controles deberia quedar algo asi...

Codificando Nuestro Formulario frmClientes

Imports System.Windows.Forms

Public Class frmProductos
    'Todo este proceso es muy similar al del Formulario frmCLientes
    Dim bd As New bdVentasLinqDataContext
    Public id As String
    Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles OK_Button.Click
        Dim row As Integer = Me.DataGridView1.CurrentRow.Index
        id = Me.DataGridView1.Item("IdArticulo", row).Value.ToString
        Me.DialogResult = System.Windows.Forms.DialogResult.OK
        Me.Close()
    End Sub

    Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles Cancel_Button.Click
        Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
        Me.Close()
    End Sub

    Private Sub frmProductos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles MyBase.Load
        Dim query = From art In bd.Articulos _
                    Select art.IdArticulo, art.Modelo, art.pre_arti, art.stock_arti _
                    Order By Modelo Ascending
        Me.DataGridView1.DataSource = query.ToList
    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) 
    Handles TextBox1.TextChanged
        Dim cadena As String
        cadena = Me.TextBox1.Text & "*"
        Dim query = From art In bd.Articulos _
                    Where art.Modelo Like cadena _
                    Select art.IdArticulo, art.Modelo, art.pre_arti, art.stock_arti _
                    Order By Modelo Ascending
        Me.DataGridView1.DataSource = query.ToList
    End Sub
End Class

Diseño del Formulario de Pedidos

Agrgamos un Formulario, al cual le agregaremos los siguientes controles:
  • 6 TextBox
  • 6 Label
  • 1 DataGridView
  • 8 Button
Y deberian quedar de la siguiente forma:

Codificando Nuestro Formulario frmClientes

Definimos de Manera Global las Siguientes Variables
    'Definir el objeto BD de la clase bdVentasLinqDataContext
    Dim bd As New bdVentasLinqDataContext
    'Definir un objeto de la clase clsDetalleVenta
    Dim objDetVta As clsDetalleVenta
    Dim nombreArticulo As String
    Dim idArticulo As String
    Dim precioArticulo As Double
    Dim DNI As String
    Dim stockArticulo As Integer
    'Definir una LISTA de Objetos clsDetalleVenta
    Dim ArrDetVta As New List(Of clsDetalleVenta)
A continuacion codificaremos el Button que se encuentra al lado del TextBox DNI
    Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles Button1.Click
        'Instanciamos un Objeto del Formulario frmClientes
        Dim dialog As New frmClientes
        'Mostramos el Formulario
        dialog.ShowDialog()
        'Si el resultado del Formulario es OK
        '----------------------------------------------------
        'Si el resultado del Formulario es diferente a OK
        'Nos mostrara un mensaje en el que nos indique que no 
        'hay ningun Cliente Seleccionado
        If dialog.DialogResult = Windows.Forms.DialogResult.OK Then
            'Usamos una instruccion LINQ para seleccionar a un Cliente en Especifico
            'El cual lo recuperamos de la variable ID que fue declarada como PUBLICA
            'En el Formulario frmClientes
            Dim query = From qCliente In bd.Clientes _
                        Where qCliente.DNI_cli = dialog.id _
                        Select qCliente.DNI_cli, qCliente.ape_cli, qCliente.nom_cli
            'Cargamos los valores del resultado de la consulta 
            'LINQ a los TextBox correspondientes
            Me.txtDNI.Text = query.ToList.Item(0).DNI_cli.ToString
            Me.txtNombre.Text = query.ToList.Item(0).nom_cli & " " & _
                            query.ToList.Item(0).ape_cli
            DNI = query.ToList.Item(0).DNI_cli.ToString
        Else
            mensajes.msginformacion("No ha seleccionado Ningun Cliente")
            Me.txtDNI.Text = ""
            Me.txtNombre.Text = ""
            DNI = ""
        End If
    End Sub
Codificaremos el Button que se encuentra al lado del TextBox Nombre del Producto
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles Button2.Click
        'Se Aplica el mismo Procedimiento que en el Evento Anterior
        'para seleccionar un Articulo
        Dim dialog As New frmProductos
        dialog.ShowDialog()
        If dialog.DialogResult = Windows.Forms.DialogResult.OK Then
            Dim query = From qArti In bd.Articulos _
                  Where qArti.IdArticulo = dialog.id _
                  Select qArti.IdArticulo, qArti.Modelo, qArti.pre_arti, qArti.stock_arti

            Me.txtNombreProducto.Text = query.ToList.Item(0).Modelo.ToString
            Me.txtPrecioProducto.Text = query.ToList.Item(0).pre_arti.ToString("C")
            nombreArticulo = query.ToList.Item(0).Modelo.ToString
            idArticulo = query.ToList.Item(0).IdArticulo.ToString
            precioArticulo = Convert.ToDouble(query.ToList.Item(0).pre_arti.ToString)
            stockArticulo = Convert.ToInt32(query.ToList.Item(0).stock_arti.ToString)
            txtCantidad.Focus()
        Else
            mensajes.msginformacion("No ha seleccionado Ningun Producto")
            Me.txtNombreProducto.Text = ""
            Me.txtPrecioProducto.Text = ""
            nombreArticulo = ""
            idArticulo = ""
            precioArticulo = ""
        End If
    End Sub
Ahora programaremos el Boton Agregar
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        'Verificamos que el Nombre del Producto, Precio y Cantidad
        'NO esten vacios
        If txtNombreProducto.Text <> "" And txtPrecioProducto.Text <> "" And txtCantidad.Text <> "" Then
            'Verificamos que el Stock del Artículo Seleccionado
            'NO sea menor que el solicitado
            If Convert.ToInt32(stockArticulo) < Convert.ToInt32(txtCantidad.Text) Then
                'Mostramos una Alerta si la verificacion Anterior es Verdadera
                mensajes.msginformacion("La Cantidad Requerida es " & _
                                        "Superior a la del Stock")
                'Como la Cantidad Solicitada es Mayor a lo que se Tiene en Stock
                'Entonces se pregunta si se kiere establecer el STOCk Actual
                'Como la nueva cantidad requerida
                If MessageBox.Show("Desea Establecer el Stock Actual como la " & _
                                   "Nueva Cantidad Requerida", "Sis. Ventas", _
                                   MessageBoxButtons.YesNo) = _
                                   Windows.Forms.DialogResult.Yes Then
                    'Establecemos la Nueva Cantidad
                    txtCantidad.Text = stockArticulo
                    'Inicializamos el Objeto de la Clase clsDetalleVenta
                    objDetVta = New clsDetalleVenta
                    'A continuacion llenamos los valores 
                    'Necesarios para este Objeto
                    objDetVta._cantidad = Convert.ToInt32(txtCantidad.Text)
                    objDetVta._idProducto = idArticulo
                    objDetVta._nombreProducto = nombreArticulo
                    objDetVta._precio = precioArticulo
                    objDetVta._stockArticulo = stockArticulo
                    objDetVta._subtotal = precioArticulo * Convert.ToInt32(txtCantidad.Text)
                    'En esta parte Verificamos si es que el Aritculo solicitado
                    'Se encuentra ya en la Lista de Pedidos, de ser Falso
                    'Lo Agregamos a Nuestros LIST de DetalleVenta
                    If buscarDetVta(ArrDetVta, objDetVta) = False Then
                        'Agregamos nuestro Pedido al LIST de DetalleVenta
                        ArrDetVta.Add(objDetVta)
                    End If
                    'Asociamos el LIST de DetalleVenta como origen de 
                    'Datos del DataGridView
                    Me.DataGridView1.DataSource = ArrDetVta
                Else
                    'Si no se desea establecer el Stock Actual como
                    'La nueva cantidad a Solicitar se vuelve al Formulario
                    'Para escoger un Articulo
                    Button2_Click(Nothing, Nothing)
                End If
            Else
                'Como la Cantidad Requerida es Menor al Stock Actual
                'inicializamos el Objeto de la clase clsDetalleVenta
                objDetVta = New clsDetalleVenta
                'A continuacion llenamos los valores 
                'Necesarios para este Objeto
                objDetVta._cantidad = Convert.ToInt32(txtCantidad.Text)
                objDetVta._idProducto = idArticulo
                objDetVta._nombreProducto = nombreArticulo
                objDetVta._precio = precioArticulo
                objDetVta._stockArticulo = stockArticulo
                objDetVta._subtotal = precioArticulo * Convert.ToInt32(txtCantidad.Text)
                'En esta parte Verificamos si es que el Aritculo solicitado
                'Se encuentra ya en la Lista de Pedidos, de ser Falso
                'Lo Agregamos a Nuestros LIST de DetalleVenta
                If buscarDetVta(ArrDetVta, objDetVta) = False Then
                    'Agregamos nuestro Pedido al LIST de DetalleVenta
                    ArrDetVta.Add(objDetVta)
                End If
                'Asociamos el LIST de DetalleVenta como origen de 
                'Datos del DataGridView
                Me.DataGridView1.DataSource = ArrDetVta.ToList
            End If
        End If
        'Una vez Agregado un Nuevo Detalle para el Pedido
        'Limpiamos los textBox
        Me.limpiar_producto()
        Button2.Focus()
        'Calculamos el Total del Pedido
        Me.calcular_total()
    End Sub
Metodo para veirifcar si es que ya se Solicito un Articulo Anteriomente
    Public Function buscarDetVta(ByVal array As List(Of clsDetalleVenta), _
    ByVal objDV As clsDetalleVenta) As Boolean
        'Funcion para verificar si es que ya se solicito un Articulo
        For Each obj As clsDetalleVenta In array
            If obj._idProducto = objDV._idProducto Then
                Dim nCantidad As Integer
                'De encontrarse el Arituclo en la Lista de Pedidos
                'Lo que se hace es incrementar la Cnatidad Solicitada
                'Mas la cantidad Pedida Anteriormente
                nCantidad = obj._cantidad + objDV._cantidad
                If nCantidad <= obj._stockArticulo Then
                    obj._cantidad = nCantidad
                    obj._subtotal = obj._precio * obj._cantidad
                Else
                    mensajes.msgerror("El Stock Actual es insuficiente para el Requerimiento")
                End If
                Return True
            End If
        Next
        Return False
    End Function
Metodo para Limpiar los TextBox Asociados al Articulo
    Sub limpiar_producto()
        'Metodo para limpiasr TextBox
        Me.txtCantidad.Clear()
        Me.txtNombreProducto.Clear()
        Me.txtPrecioProducto.Clear()
    End Sub
Metodo para Calcular el Total del Pedido
    Sub calcular_total()
        'Metodo para Calcular El Total del Pedido
        Dim sum As Double
        For Each i As clsDetalleVenta In ArrDetVta
            sum += i._subtotal
        Next
        Me.txtTotal.Text = sum.ToString("C")
    End Sub
Ahora Programaremos el Boton Eliminar
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles Button4.Click
        'Removemos un Articulo seleccionado en el DataGridView
        ArrDetVta.RemoveAt(Me.DataGridView1.CurrentRow.Index)
        'Vovlemos a Asociar nuestro LIST como origen de Datos del DataGridView
        Me.DataGridView1.DataSource = ArrDetVta.ToList
        'Volvemos a Calcular el Total del Pedido
        Me.calcular_total()
    End Sub
Programamos el Boton Cancelar
    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles Button5.Click
        limpiar_cliente()
        limpiar_producto()
        limpiar_venta()
        Me.calcular_total()
    End Sub
Metodo para limpiar los Controles asociados al Cliente
    Sub limpiar_cliente()
        'Metodo para limpiar los textBox Asociados al Cliente
        Me.txtDNI.Clear()
        Me.txtNombre.Clear()
    End Sub
Metodo para borrar el Detalle del Pedido
    Sub limpiar_venta()
        'Limpiamos el LIST usando su Metodo CLEAR
        ArrDetVta.Clear()
        'Vovlemos a Asociar nuestro LIST como origen de Datos del DataGridView
        Me.DataGridView1.DataSource = ArrDetVta.ToList
    End Sub
Y por Ultimo y quizas lo mas importante, la codificacion del Boton Grabar
    Private Sub btngrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles btngrabar.Click
        'Aprovechando que nuestra Base de Datos
        'Esta relacionada, usaremos a LINQ para que 
        'Nos haga las Inserciones y actualizaciones
        'Que necesitamos
        Try
            'La siguiente Expresion me devuelve un Objeto Cliente
            'buscandolo por su id es decir por el Campo DNI_Cli
            Dim C As Cliente = bd.Clientes.Single(Function(p) p.DNI_cli = Me.txtDNI.Text)
            'Creo un nuevo Encabezado de Boleta
            'Y procedo a Inicializarlo
            '-------------------------------------------------
            Dim EB As New EncabezadoBoleta
            EB.Fech_Bol = Date.Now
            EB.Total_Bol = CDec(Me.txtTotal.Text)
            EB.Anulado = "F"
            EB.Cliente = C
            EB.IdCliente = C.IdCliente
            '--------------------------------------------------
            '
            '
            'Ya que tengo todo el Detalle del Pedido en un LIST
            'Aprovechare este detalle para generar mis Objetos Pedido
            For Each obj As clsDetalleVenta In ArrDetVta
                'Instacion un Objeto Articulo Seleccionandolo
                'Por el Campo IdArticulo
                Dim Art As Articulo = _
                bd.Articulos.Single(Function(a) a.IdArticulo = obj._idProducto.ToString())
                'Creo un nuevo Detalle de Boleta 
                'Y procedo a Inicializarlo
                Dim DB As New DetalleBoleta
                DB.Articulo = Art
                DB.Cant_det = obj._cantidad
                DB.Importe = obj._subtotal
                DB.Prec_det = obj._precio
                'Agrego el Detalle de Boleta a mi Encabezado de Boleta
                EB.DetalleBoletas.Add(DB)
            Next
            'Aqui Actualizo la Base De Datos con el Metodo SubmitChanges
            bd.SubmitChanges()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

 

Conclusiones

Como vemos, el modelo de programación que hemos usado para hacer todo esto es realmente limpio y orientado a objetos.

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

System.Data
System.Linq
System.Xml.Linq
Posted by Fredy Najarro
on 14:13

Cómo crear mi primera página en HTML5 y CSS3

En este artículo explicaremos cómo crear nuestra primera página en HTML5 y CSS3 con WebMatrix 2, veremos algunas de las novedades en etiquetas y atributos de estos estándares y las ventajas que nos ofrece WebMatrix 2 para esta tarea.
Para ello necesitaremos descargar la herramienta:
Descárgalo gratis desde aquí, empieza a desarrollar tu sitio web
ayuda a mejorar la herramienta publicando tu feedback en el foro de WebMatrix.


                            Internet Explorer 9 es el navegador más compatible con HTML5.
clip_image001Si no lo tienes instalado deberías probarlo. 
Puedes descargarlo desde aquí.

Empieza con WebMatrix

imageimage
Cuando iniciamos WebMatrix tendremos la opción de abrir un sitio ya creado, de empezar a programar desde una plantilla o instalar una aplicación de la galería. Elegiremos crear nuestro sitio web desde una plantilla, que será la plantilla de sitio vacío para crearlo desde cero.
En la pantalla principal de WebMatrix seleccionamos el icono Files de la parte inferior izquierda y haremos doble clic en el fichero Default.cshtml. Este fichero será nuestra página de inicio del sitio web. Viene con la estructura base para que podamos empezar a programar en HTML5 y utilizar sintáctica Razor para código de servidor. En este artículo nos centraremos en el código HTML5.

Estructura HTML5

Con HTML5 tendremos una web más simple y semántica gracias a las nuevas etiquetas para identificar mejor algunos elementos y no llenar nuestra página de elementos div sin ningún valor semántico. El ejemplo más claro son las etiquetas <video<audioutilizadas para esta clase de elementos multimedia pudiendo identificarlos mejor que con los típicos div con un id.
<!DOCTYPE html> 
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>       
    </body>
</html>
image
Con WebMatrix 2 si no tienes muchos conocimientos de HTML5, su estructura y nuevas etiquetas, no te preocupes, mientras escribes te aparecerán sugerencias mostrándote las etiquetas que puedes utilizar y cuando la selecciones te pondrá la etiqueta de cierre automáticamente para que no se te olvide.
imageSi quieres una ayuda más amplia puedes presionar el icono de ayuda que aparece arriba a la derecha. Este icono abre un panel en el que aparecen enlaces a material y cursos referente al tipo de codificación que tenga la página. Si estamos creando una página .cshtml podremos ver ayuda sobre ASP.NET si es .html será sobre HTML5, etc.

Uso de Header, Nav y Footer

Vamos a editar la estructura para adecuarla a lo que queremos, empezando por cambiar el lenguaje de la página a español y poniendo el título “Mi primer sitio html5”. También pondremos un título, un menú de navegación y el pie de página.
Existe una etiqueta nueva denominada <header>. Se utiliza para los elementos que sean encabezados, normalmente títulos, que tengamos en nuestra página y pueden haber varias de estas etiquetas. El título lo pondremos dentro de una etiqueta <header>.
Para el menú utilizaremos la etiqueta <navque es la etiqueta para este tipo de funcionalidad que se ha añadido en HTML5. Añadiremos unos cuantos enlaces en el menú. En HTML5 también existe una etiqueta <menupero hay que tener en cuenta que si se trata del menú de navegación se debe utilizar <nav>.
El pie de página será un elemento <footery dentro de este hemos añadido el copyright y una fecha para mostrar la última actualización.
<!DOCTYPE html>
<html lang="es">
    <head>
        <meta charset="utf-8" />
        <title>Mi primer sitio HTML5</title>
    </head>
    <body>
       <header><h1>Mi primer sitio HTML5</h1></header>
        <nav>
            <ul>
                <li><a href="#">inicio</a></li>
                <li><a href="#">blog</a></li>
                <li><a href="#">vídeos</a></li>
            </ul>
        </nav>
        <footer>
            <small>
                Copyright © 2011<br/>
                Actualizado en: 11 Noviembre 2011           
            </small>        
        </footer>
    </body>
</html>

Etiquetas Section y Article

Para que no quede tan desolada la página vamos a añadir algo de texto. Para ello insertaremos un elemento<section> entre el menú y el pie, y dentro de ella unos elementos <articledonde pondremos un pequeño texto con un título. El título lo pondremos también entre etiquetas <header>.
<section>
     <article>
         <header><h2>WebMatrix 2</h2></header>
          <p>WebMatrix 2 Beta es una herramienta para desarrollo web con la que
          podrás instalar, desarrollar, optimizar, desplegar y administrar tus sitios.
          De esta forma, WebMatrix 2 te permite crear tus sitios web utilizando sólo
          una herramienta. Esta herramienta trae consigo muchas novedades orientadas
          sobre todo a ayudar al desarrollador en la tarea de construir su sitio
          web.</p>
      </article>              
 </section>

La etiqueta <articleestá pensada para definir contenidos que pueda publicarse o distribuirse independientemente, como artículos, comentarios de post, etc. Unas etiquetas de este tipo pueden contener a otras por ejemplo tener el contenido de un post con esta etiqueta y después varias etiquetas dentro correspondientes a los comentarios del mismo.
Definir el uso de <section> es un poco más complejo. Según el estándar representa una sección genérica agrupando un contenido con la misma temática y contiene una cabecera.
Puede ver todas las nuevas etiquetas de HTML5 aquí.

Primer vistazo

image
Ahora ejecutaremos el sitio para ver el resultado de nuestro primer código HTML5. Para ello tenemos el botón Run en la barra superior. Podemos presionar directamente este botón abriéndose nuestro sitio en el navegador que tengamos por defecto o acceder al menú para seleccionar en cuál queremos ejecutarlo o hacerlo en todos con un único clic.
image






 

Editar estilo con WebMatrix

El resultado que obtenemos es muy simple debido a que no hemos aplicado ningún estilo, así que nos pondremos a ello. Seleccionamos nuestro sitio web y crearemos un nuevo fichero, ya sea presionando el botón New en el menú de la parte superior o haciendo clic con el botón derecho encima de la carpeta de nuestro sitio “Mi primer sitio HTML5”.
Nos aparecerá el panel para elegir el tipo de fichero y nombrarlo. Elegiremos un fichero de tipo CSS y de nombre pondremos estilo.css.
image
Se nos abrirá el fichero CSS para que lo editemos. Si tenemos abierto el panel de ayuda de la derecha podremos ver distintos enlaces a material sobre CSS. Aparte de esta ayuda y de las sugerencias que te ofrece WebMatrix para completar el código, tenemos un Color imagePicker.
Este control aparece cuando tenemos que poner alguna propiedad de tipo color. Tendremos una barra donde podremos elegir colores de una fila estando al principio los que hayamos usado ya en la página. Si presionamos el botón + que está en la barra se despliega un panel con el que podremos elegir mejor el color que queramos y cambiar la transparencia o, en cambio, copiar alguno gracias a la herramienta de selección de color.
Otra ayuda interesante que nos propone WebMatrix aparece a la hora de escribir el valor de algún atributo, informándonos, aparte de sugerencias de posibles valores, qué tipo de valores puede contener ese atributo. En el ejemplo podemos ver cómo nos aparece que el atributo font-size puede tener valores absolutos, relativos, una unidad de medida o un porcentaje.
image

Maquetar la página

Una vez explicado cómo WebMatrix nos puede ayudar con nuestro estilo, vamos a ir creando un estilo no muy complejo para nuestro sitio web. Primero tendremos que añadir a nuestro fichero HTML5 en la sección <head> unenlace al fichero CSS para que coja el estilo aplicado en ese CSS.
<link rel="stylesheet" href="estilo.css"/>
Empezaremos por “colocar” las 3 partes que se compone nuestra página. Pondremos el menú de navegación a la izquierda, la sección con los artículos a la derecha y el pie de página debajo de la sección a la izquierda. También le daremos un ancho fijo a cada una.
nav{
    float:left;
    width150px;
}
section{
    float:right;
    width:570px;
}
footer{float:left}
He elegido ese ancho debido a que voy a crear la página para una resolución de 1024x720. Lo ideal si se pone un ancho fijo es ir cambiándolo según la resolución del dispositivo desde el que esté navegando el usuario con las Media-Queries. Con las Media-Queries podremos hacer sentencias más precisas que las que podíamos hacer con la regla Media gracias a los nuevos valores que se pueden introducir en los atributos.
Para que quede bien el contenido debemos poner un ancho fijo también al <body> y así centramos el contenido. De paso, utilizando el Color Picker, elegiremos un color para el fondo y pondremos un pequeño margen.
body {
    background-color:#f2f2f2;
    margin36px auto;
    width720px;
}

Personalizar el menú de navegación

Una vez estructurada la página vamos a dar estilo al menú de navegación. Con el atributo list-style-typepodemos cambiar el tipo de enumeración de la lista, para este caso no pondremos ninguno y añadiremos unmargin y un padding igual a cero.
nav ul {
         list-style-type:none;
         margin0px;
         padding0px;        
}
También utilizaremos text-transform para aplicar transformaciones al texto, en este caso de todas las transformaciones que tenemos usaremos la de poner la primera letra de las palabras en mayúscula, “capitalizar” las palabras de la lista, cambiaremos el color del texto y quitaremos el formato de enlace.
nav ul li {
    margin5pxpadding10pxtext-transform:capitalizefont-size20px;
}
nav ul li a {
    color:#e34c26;
    text-decorationnone;
}

Utilizar CSS Selector

Una característica interesante de CSS3 es la posibilidad de seleccionar elementos por medio de los CSS Selectors. Los CSS Selectors nos permiten elegir a qué hijos de un elemento queremos aplicar un determinado estilo de una forma fácil. Cómo ejemplo vamos a aplicar un estilo distinto a los elementos pares e impares de <articleque tenemos poniendo un fondo blanco con distinta transparencia con el Color Picker.
article:nth-child(odd){
    background-color:rgba(255, 255, 255, 0.20)
}
article:nth-child(even){
    background-color:rgba(255, 255, 255, 0.60)
}
Podemos ver que con CSS Selector aplicar un estilo distinto dependiendo de la paridad del elemento es muy fácil con el atributo odd y even. También acepta ecuaciones, por ejemplo (3n), con lo que el estilo se aplicaría cada 3 elementos.

Redondear esquinas de bordes con border-radius

Para mejorar un poco el aspecto de nuestra página vamos a añadir bordes a los elementos de nuestro menú y artículos.
En CSS3 se ha añadido una nueva característica denominada border-radius con la que podremos redondear los bordes de los elementos sin necesidad de poner imágenes de fondo para lograr esta clase de efecto. Se puede cambiar el ángulo de la curva del borde para decir cuán pronunciada la queremos.
Aplicaremos un borde uniforme a los artículos mientras que para los elementos del menú haremos un borde más estiloso para comprobar todo el potencial de este atributo. Más información aquí.
article{
    margin-bottom:5pxpadding10px;
    border-radius10px 10px 10px 10px;
    border-stylesolid;
    border-width2px;
    border-color:#ffffff;
}
nav ul li {
    margin5pxpadding10pxtext-transform:capitalizefont-size20px;
    border-radius152px 304px 228px 152px;
    border-stylesolid;
    border-width3px;
    border-color:#ffffff
}

Último vistazo

Ya hemos creado nuestra estructura en HTML5 y aplicado un estilo a los elementos viendo algunas de las novedades de CSS3. Para acabar volveremos a ejecutar nuestro sitio para ver el resultado.
image

Posted by Fredy Najarro
on 11:15