sábado, 5 de febrero de 2011

VB.Net - Reporte Estadísticos - Primera Parte

Para el siguiente articulo usaremos el componente Control Chart que ya se incluye en el Visual Studio 2010; para las versiones anteriores puedes descargarlo (http://www.microsoft.com/es-es/download/details.aspx?id=14422) y hacer uso de este potente componente. No entraremos en detalle del mencionado componente, daremos algunas pautas para su uso.

Requisitos para el Desarrollos
  1. IDE (Visual Studio 2010).
  2. LP (VB.Net).
  3. SGBD (SQL Sever 2008)
  • Crear el proyecto con nombre de Grafico - Chart.
  • Adicionar y diseñar nuestro formulario dando uso del control chart.
    Pautas

    Crear la tabla producto
    Con solos siguiente campos.




    Cadena de conexión (Add Module1.vb).
    Crear nuestra cadena de conexión, con nombre "conn"
    Imports System.Data.SqlClient
    Module Module1
        Public conn As New SqlConnection("Data Source=.; Initial Catalog=BD_PRUEBAS; User Id=hadsonpar; Password=hadsonparedes") '; integrated security=true
    End Module
    
    Control combobox.
    Adicionamos algunos de los tipos de gráficos para ir mostrando la variedad que nos brindada este control (chart).

    Pie
    Line
    Point
    Bar
    Polar
    Range
    Renko
    SplineArea
    StackedBar
    RangeColumn
    ThreeLineBreak
    BoxPlot
    Pyramid
    StackedColumn100
    PointAndFigure
    Area
    RangeBar
    StepLine
    BoxPlot
    Kagi
    Bubble
    Candlestick
    Doughnut
    Funnel
    FastLine
    Stock
    Column
    Radar

    Crear función (TipoGrafico).
    En esta función definiremos la serie, el valor, los puntos X - Y y el estilo de nuestro gráfico.


    Public Function TipoGrafico(ByVal grafico As DataVisualization.Charting.SeriesChartType)
            Dim Sql As String = "Select Producto, Cantidad From dbo.Producto"
    
            Dim cmd As New SqlCommand(Sql, conn)
            cmd.CommandType = CommandType.Text
            Dim da As New SqlDataAdapter(cmd)
    
            Dim dt As New DataTable
    
            da.Fill(dt)
    
            'limpiar los puntos X Y
            Chart1.Series(0).Points.Clear()
            'valores de grafico
            Chart1.Series(0).IsValueShownAsLabel = True
            'tipo de grafico
            Chart1.Series(0).ChartType = grafico
    
            Chart1.Series(0)("PieLabelStyle") = "Inside"
            Chart1.Series(0)("PieDrawingStyle") = "Concave"
    
            'forma 3 D
            Chart1.ChartAreas(0).Area3DStyle.Enable3D = True
            'definor color grafico
            Chart1.Series(0).Color = Color.RoyalBlue
            'valor de los ejes X Y
            Chart1.Series(0).XValueMember = "Producto"
            Chart1.Series(0).YValueMembers = "Cantidad"
    
            Chart1.Series(0)("DrawingStyle") = "Wedge"
            Chart1.Series(0)("PointWidth") = "0.6"
            Chart1.BorderSkin.SkinStyle = DataVisualization.Charting.BorderSkinStyle.Emboss
    
            'label
            Chart1.Series(0).IsValueShownAsLabel = True
            'Chart1.Series(0).LabelFormat = "P2"
            Chart1.Series(0)("LabelStyle") = "Bottom"
            Chart1.Series(0).Font = New Font("Times New Roman", 7)
    
            'fondo chart
            Chart1.BackColor = Color.White
            Chart1.BackSecondaryColor = Color.SkyBlue
            Chart1.BackGradientStyle = DataVisualization.Charting.GradientStyle.TopBottom
    
            'fondo area
            Chart1.ChartAreas(0).BackColor = Color.White
            Chart1.ChartAreas(0).BackSecondaryColor = Color.SkyBlue
            Chart1.ChartAreas(0).BackGradientStyle = DataVisualization.Charting.GradientStyle.DiagonalLeft
            Chart1.ChartAreas(0).ShadowOffset = 3
    
            'grid line
            Chart1.ChartAreas(0).AxisX.MajorGrid.LineDashStyle = DataVisualization.Charting.ChartDashStyle.NotSet
            Chart1.ChartAreas(0).AxisX.MinorGrid.LineDashStyle = DataVisualization.Charting.ChartDashStyle.NotSet
            Chart1.ChartAreas(0).AxisY.MajorGrid.LineDashStyle = DataVisualization.Charting.ChartDashStyle.NotSet
            Chart1.ChartAreas(0).AxisY.MinorGrid.LineDashStyle = DataVisualization.Charting.ChartDashStyle.NotSet
    
            'axis
            Chart1.ChartAreas(0).AxisX.LabelStyle.Font = New Font("Arial", 8)
            Chart1.ChartAreas(0).AxisY.LabelStyle.Font = New Font("Arial", 8)
            Chart1.ChartAreas(0).AxisY.LabelStyle.Format = "P0" 'porcentaje con cero decimales
    
    
            Chart1.DataSource = dt
        End Function

    Botón (BtnCargarGrafico).
    Invocaremos a la función que acabamos de crea.

    Private Sub BtnCargarGrafico_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCargarGrafico.Click
            Select Case CmbTipoGrafico.SelectedIndex
                Case 0
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.Pie)
                Case 1
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.Line)
                Case 2
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.Point)
                Case 3
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.Bar)
                Case 4
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.Polar)
                Case 5
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.Range)
                Case 6
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.Renko)
                Case 7
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.SplineArea)
                Case 8
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.StackedBar)
                Case 9
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.RangeColumn)
                Case 10
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.ThreeLineBreak)
                Case 11
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.BoxPlot)
                Case 12
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.Pyramid)
                Case 13
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.StackedColumn100)
                Case 14
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.PointAndFigure)
                Case 15
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.Area)
                Case 16
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.RangeBar)
                Case 17
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.StepLine)
                Case 18
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.BoxPlot)
                Case 19
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.Kagi)
                Case 20
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.Bubble)
                Case 21
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.Candlestick)
                Case 22
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.Doughnut)
                Case 23
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.Funnel)
                Case 24
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.FastLine)
                Case 25
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.Stock)
                Case 26
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.Column)
                Case Else
                    TipoGrafico(DataVisualization.Charting.SeriesChartType.Radar)
            End Select
    Visualizamos algunos de los gráficos y cargamos la data con el tipo de gráfico SplineArea.
    Tipos de gráficos.

    Reporte (gráfico SplineArea).

    Espero les sirva...

viernes, 28 de enero de 2011

VB.Net - Importar y Exportar Rango de datos de Excel a DataGridView

El objetivo de este pequeño articulo es conocer la simplicidad de importar un rango establecido de datos de Excel a un DataGridView; así mismo exportar los datos desde el DataGridView a Excel. Simple pero de gran importancia para implementar nuestras aplicaciones.

Requisitos para el Desarrollos
  1. IDE (Visual Studio 2010).
  2. Microsoft Excel 2010 (también aplica a las demás versiones).
  3. LP (Visual Basic.Net).
  • Adicionar Modulo (Mdl_Maestros) al proyecto donde deseas implementar.
  • Crear los Métodos ImportarRango y ExportarDgvExcel

    Module Mdl_Maestro
    
        Dim strSql As String = String.Empty 'Por defecto (vacío)
        Dim strRango As String = "B7:AU" 'Rango seleccionado (solo lo que se exportara)
    
        Dim ObjDttImp As DataTable 'Importar archivo excel
        Dim ObjDataAdapter As OleDb.OleDbDataAdapter
        Dim ObjOleConnection As OleDb.OleDbConnection
    
        Dim xlApp As New Excel.Application ' Aplicación Excel
        Dim wb As Excel.Workbook            ' Libro de trabajo
    
        Public ObjdttExp As DataTable
    
        Public Sub ImportaRango(ByVal sFileName As String, ByVal dgv As DataGridView, ByVal iTrans As Integer)
            Try
                'Comprobar que el archivo Excel existe  
                If System.IO.File.Exists(sFileName) Then
                    Dim sCs As String = "provider=Microsoft.Jet.OLEDB.4.0; " & "data source=" & sFileName & "; Extended Properties=Excel 8.0;"
                    ObjOleConnection = New System.Data.OleDb.OleDbConnection(sCs)
    
                    wb = xlApp.Workbooks.Open(Filename:=sFileName)
                    For Each sheet As Excel.Worksheet In wb.Worksheets
                        Select Case iTrans
                            Case 1 'where Transacció in ('A','B') and Producto = 1 order by Transacció (Aca mismo puedo filtrar sin registro vacio)
                                strSql = "select * from " & "[" & sheet.Name & "$" & strRango & "] where lote <> null"
                                'Case 2 (implementar, si asi lo requiere)
                          End Select
    
                    Next
                    'Obtener los datos  
                    ObjDataAdapter = New System.Data.OleDb.OleDbDataAdapter(strSql, ObjOleConnection)
                    'Crear DataTable y llenarlo  
                    ObjDttImp = New DataTable
    
                    ObjDataAdapter.Fill(ObjDttImp)
                    'Cerrar la conexión  
                    ObjOleConnection.Close()
                    'Enlazar DataGrid al DataTable  
                    dgv.DataSource = ObjDttImp
    
                    wb.Close(True)
                    xlApp.Quit()
                Else
                    MsgBox("No se ha encontrado el archivo: " & sFileName, MsgBoxStyle.Exclamation)
                End If
                Exit Sub
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Critical)
            End Try
        End Sub
    
    
        Public Sub ExportarDgvExcel(ByVal Dgv As DataGridView)
            Dim FileFichero As New SaveFileDialog()
            FileFichero.Filter = "Excel (*.xls)|*.xls"
    
            Try
                If FileFichero.ShowDialog() = DialogResult.OK Then
                    Dim aplicacion As Microsoft.Office.Interop.Excel.Application
                    Dim libros_trabajo As Microsoft.Office.Interop.Excel.Workbook
                    Dim hoja_trabajo As Microsoft.Office.Interop.Excel.Worksheet
                    aplicacion = New Microsoft.Office.Interop.Excel.Application()
                    libros_trabajo = aplicacion.Workbooks.Add()
                    hoja_trabajo = DirectCast(libros_trabajo.Worksheets.Item(1), Microsoft.Office.Interop.Excel.Worksheet)
    
                    'Definir Cabecera para la exporación
                    For c As Integer = 0 To Dgv.Columns.Count - 1
                        hoja_trabajo.Cells(1, c + 1).value = Dgv.Columns(c).HeaderText
                    Next
    
                    'Definir Filas para la exportación
                    For r As Integer = 0 To Dgv.RowCount - 1
                        For c As Integer = 0 To Dgv.Columns.Count - 1
    
                            hoja_trabajo.Cells(r + 2, c + 1).value = Dgv.Item(c, r).Value
                        Next
                    Next
    
                    With aplicacion
                        .StandardFont = "Arial"
                        .StandardFontSize = "8"
                    End With
    
                    With hoja_trabajo.Cells.Range("A1:AU1").Font
                        .Name = "Arial"
                        .FontStyle = "Negrita"
                        .Size = 8
                    End With
    
                    libros_trabajo.SaveAs(FileFichero.FileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal)
                    libros_trabajo.Close(True)
                    aplicacion.Quit()
                End If
    
            Catch ex As Exception
                Throw ex
            End Try
        End Sub
    
    End Module
    

domingo, 23 de enero de 2011

ADO.Net - Insertar, actualizar y eliminar datos utilizando Sql Server 2008

El objetivo de este articulo es aprender y conocer más sobre la importancia de usar ADO.Net (recordemos que ADO.Net, es una parte de la biblioteca de clases base que están incluidas en el Microsoft .NET Framework); sobre este misma aplicación iremos agregando nuevas cosas, como por ejemplo mostrar los datos en forma de una lista utilizando SAP Crystal Reports for Visual Studio 2010, exporta a Microsoft Excel 2010 entre otras cosas que se me ocurre.

Comencemos con los requisitos:

Requisitos para el Desarrollos
  1. IDE (Visual Studio 2010).
  2. SGBD (SQL Server 2008).
  3. LP (C#).
  • Crear la solución con nombre de [ADO.Net Mantenimiento] así mismo creamos el proyecto que se llamara como el mismo nombre que tiene la solución.
  • Diseñamos nuestro formulario que esta compuesto por los controles de etiqueta (label), texto (textbox), grillas (datagridview) y botones (button).

  • Breves Explicaciones

    Cadena de conexión (app.config).
    Crear nuestra cadena de conexión (código XML), con nombre "cndb"
    
      
        
      
        
      
    
    Entidades (clsClienteEntity).
    Creamos la clase de entidad, donde creamos las propiedades (columna) de la entidad (tabla cliente). 

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ADO.Net_Mantenimiento
    {
        public class ClsClienteEntity
        {
            public int IdCliente {get; set;}
    
            public string NomCliente {get; set;}
            public string ApeCliente{get; set;}
            public string DirCliente {get; set;}
            public string TelCliente {get;set;}
            public string CelCliente { get; set;}
        }
    }
    Capa de acceso a datos (clsClienteDal).
    Creamos nuestro método privado cargarCliente, en la cual creamos nuestra estructura de solo lectura y hacemos referencia a nuestra clase de entidades ClsClienteEntity.
    //Invocamos o importamos estas referencias
    using System.Data;
    using System.Data.SqlClient; // Proveedor de base de datos
    using System.Configuration; // para poder acceder a nuestra archivo de configuraciones (App.config)
    
    //Sobre esta evento ya se hablo en el anterior articulo
        public class ClsClienteDAL
        {
            private static ClsClienteEntity CargaCliente(IDataReader Reader)
            {
                ClsClienteEntity cliente = new ClsClienteEntity();
    
                cliente.IdCliente = Convert.ToInt32(Reader["IdCliente"]);
    
                cliente.NomCliente = Convert.ToString(Reader["NomCliente"]);
                cliente.ApeCliente = Convert.ToString(Reader["ApeCliente"]);
                cliente.DirCliente = Convert.ToString(Reader["DirCliente"]);
                cliente.TelCliente = Convert.ToString(Reader["TelCliente"]);
                cliente.CelCliente = Convert.ToString(Reader["CelCliente"]);
    
                return cliente;
            }
    Creamos nuestro evento público de tipo  lista para capturar todos los registro de nuestra entidad (tabla) Cliente.

    //Filtrar todos los registros de la entidad cliente
            public static List<clsclienteentity> ClienteAll()
            {
                string strsql = @"SELECT [IdCliente]
                                          ,[NomCliente]
                                          ,[ApeCliente]
                                          ,[DirCliente]
                                          ,[TelCliente]
                                          ,[CelCliente]
                                      FROM [dbAdoNet].[dbo].[Cliente]";
    
                List<clsclienteentity> listar = new List<clsclienteentity>();
    
                using (SqlConnection sqlcn = new SqlConnection(ConfigurationManager.ConnectionStrings["cndb"].ToString()))
                {
                    SqlCommand sqlcmd = new SqlCommand(strsql, sqlcn);
                    sqlcn.Open();
                    SqlDataReader sqlReader = sqlcmd.ExecuteReader();
    
                    while (sqlReader.Read())
                    {
                        listar.Add(CargaCliente(sqlReader));
                    }
                    return listar;
                }
            }

Creamos nuestro evento público para filtrar los registro de acuerdo al IdCliente (filtrar por código de cliente) de nuestra entidad (tabla) Cliente.
//Filtrar registro por ID de la entidad cliente
        public static ClsClienteEntity ClienteID(int ID)
        {
            string strsql = @"SELECT [IdCliente]
                                      ,[NomCliente]
                                      ,[ApeCliente]
                                      ,[DirCliente]
                                      ,[TelCliente]
                                      ,[CelCliente]
                                  FROM [dbAdoNet].[dbo].[Cliente]
                                  WHERE [IdCliente]=@ID";

            ClsClienteEntity cliente = null;
            using (SqlConnection sqlcn = new SqlConnection(ConfigurationManager.ConnectionStrings["cndb"].ToString()))
            {
                SqlCommand sqlcmd = new SqlCommand(strsql, sqlcn);

                sqlcmd.Parameters.AddWithValue("Id", ID);
                sqlcn.Open();

                SqlDataReader sqlReader = sqlcmd.ExecuteReader();

                if (sqlReader.Read())
                {
                    cliente = CargaCliente(sqlReader);
                }
                return cliente;
            }
        }

Creamos nuestro evento privado para generar nuevo IdCliente (código de cliente) de nuestra entidad (tabla) Cliente.
//Capturar el máximo ID de la entidad cliente (tabla)
        private static int idmax()
        {
            string strsql = @"SELECT MAX(IdCliente) FROM CLIENTE";

            using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["cndb"].ToString()))
            {
                SqlCommand cmdsql = new SqlCommand(strsql, cn);
                cn.Open();

                return Convert.ToInt32(cmdsql.ExecuteScalar());
            }
        }
Creamos nuestro evento público para la inserción de un nuevo registro e invocamos  nuestro evento privado que genera un nuevo código (int nuevoid = idmax() + 1).
//Método Insertar nuevo registro
        public static ClsClienteEntity InsertarRegistro(ClsClienteEntity cliente)
        {
            string strsql = @"INSERT INTO dbAdoNet.dbo.Cliente
                                           (IdCliente
                                           ,NomCliente
                                           ,ApeCliente
                                           ,DirCliente
                                           ,TelCliente
                                           ,CelCliente)
                                     VALUES
                                           (@IdCliente
                                           ,@NomCliente
                                           ,@ApeCliente
                                           ,@DirCliente
                                           ,@TelCliente
                                           ,@CelCliente)";
            using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["cndb"].ToString()))
            {
                //Incrementamos nuevo id
                int nuevoid = idmax() + 1;
                SqlCommand cmdsql = new SqlCommand(strsql, cn);

                cmdsql.Parameters.AddWithValue("IdCliente", nuevoid);
                cmdsql.Parameters.AddWithValue("NomCliente", cliente.NomCliente);
                cmdsql.Parameters.AddWithValue("ApeCliente", cliente.ApeCliente);
                cmdsql.Parameters.AddWithValue("DirCliente", string.IsNullOrEmpty(cliente.DirCliente) ? (object)DBNull.Value : cliente.DirCliente);
                cmdsql.Parameters.AddWithValue("TelCliente", cliente.TelCliente);
                cmdsql.Parameters.AddWithValue("CelCliente", string.IsNullOrEmpty(cliente.CelCliente) ? (object)DBNull.Value : cliente.CelCliente);

                cn.Open();

                cmdsql.ExecuteNonQuery();
                cliente.IdCliente = nuevoid;
                return cliente;
            }
        }

Creamos nuestro evento público para la actualización de los registros de acuerdo al IdCliente (código cliente) seleccionado.
//Método Actualizar registro
        public static ClsClienteEntity ActualizarRegistro(ClsClienteEntity cliente, int id)
        {
            //int idcli = Convert.ToInt32(cliente.IdCliente);

            string strsql = @"UPDATE dbAdoNet.dbo.Cliente
                           SET NomCliente = @NomCliente
                              ,ApeCliente = @ApeCliente
                              ,DirCliente = @DirCliente
                              ,TelCliente = @TelCliente
                              ,CelCliente = @CelCliente
                         WHERE IdCliente = @IdCliente";
            
            
            using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["cndb"].ToString()))
            {
                
                SqlCommand cmdsql = new SqlCommand(strsql, cn);
                
                cmdsql.Parameters.AddWithValue("NomCliente", cliente.NomCliente);
                cmdsql.Parameters.AddWithValue("ApeCliente", cliente.ApeCliente);
                cmdsql.Parameters.AddWithValue("DirCliente", string.IsNullOrEmpty(cliente.DirCliente)?(object)DBNull.Value:cliente.DirCliente);
                cmdsql.Parameters.AddWithValue("TelCliente", cliente.TelCliente);
                cmdsql.Parameters.AddWithValue("CelCliente", string.IsNullOrEmpty(cliente.CelCliente) ? (object)DBNull.Value : cliente.CelCliente);
                cmdsql.Parameters.AddWithValue("IdCliente", id);

                cn.Open();
                cmdsql.ExecuteNonQuery();

                return cliente;
            }
        }

Creamos nuestro evento público para la eliminación del registro seleccionado.
public static void ElimarRegistro(int id)
        {
            string strsql = @"DELETE FROM Cliente WHERE IdCliente = @IdCliente";

            using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["cndb"].ToString()))
            {
                SqlCommand cmdsql = new SqlCommand(strsql, cn);
                cmdsql.Parameters.AddWithValue("IdCliente", id);

                cn.Open();
                cmdsql.ExecuteNonQuery();
            }
        }
En el formulario invocaremos nuestros eventos que se crearon en la clsClienteDal.

Iniciamos controlando nuestro formulario en el evento cargar (load);  controlamos nuestra caja de texto de solo lectura (este valor es el código autogenerado) y a su vez cargamos nuestra grilla invocando nuestra clase ClsClienteDAL y evento ClienteAll().
//Evento Load
        private void Form1_Load(object sender, EventArgs e)
        {
            //Bloquear campo id (sera autogenerado)
            txtID.ReadOnly = true;
           
            //Cargamos el datagridview
            dgv_cliente.DataSource = ClsClienteDAL.ClienteAll();                        
        }

En el evento doble clic de la grilla validamos si es que existe if (row != nullregistros y capturamos el registro “ID” (int id = Convert.ToInt32(row.Cells["ID"].Value); que se encuentra en la grilla; si es que todo marcha bien seleccionamos las entidades   (if (this.ClienteSelected != null) para setear los valores en los controles, que en te caso todos son cajas de textos.
//Cargar los textbox desde el datagridview
        private void dgv_cliente_DoubleClick(object sender, EventArgs e)
        {
            DataGridViewRow row = dgv_cliente.CurrentRow as DataGridViewRow;

            if (row != null)
            {
                //Obtenemos la columna ID del datagridview
                int id = Convert.ToInt32(row.Cells["ID"].Value);

                this.ClienteSelected = ClsClienteDAL.ClienteID(id);

                if (this.ClienteSelected != null)
                {
                    ClsClienteEntity cliente = this.ClienteSelected;
                    
                    txtID.Text = Convert.ToString(cliente.IdCliente);

                    txtNombres.Text = cliente.NomCliente;
                    txtApellidos.Text = cliente.ApeCliente;
                    txtDireccion.Text = cliente.DirCliente;
                    txtTelefono.Text = cliente.TelCliente;
                    txtCelular.Text = cliente.CelCliente;

                }
              }
        }

Evento para realizar el limpiado de las cajas texto y enviar el foco a la caja de texto (txtNombres.Focus()).
//Metodo Limpiar controles
        private void LimpiarCtrl()
        {
            txtID.Text = "";
            txtNombres.Text = "";
            txtApellidos.Text = "";
            txtDireccion.Text = "";
            txtTelefono.Text = "";
            txtCelular.Text = "";

            txtNombres.Focus();
        }

Evento clic de botón guardar, recuperamos y validamos los valores obligatorios a ingresar en la caja de texto e invocamos los eventos de Inserción y actualización que se encuentra en la clase  ClsClienteDAL, limpiamos los controles ingresados y por último invocamos al evento ClienteAll que se encuentra en la clase ClsClienteDAL.
private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                ClsClienteEntity cliente = new ClsClienteEntity();

                //Recuperar los valores ingresados de la caja de texto
                cliente.NomCliente = txtNombres.Text;
                cliente.ApeCliente = txtApellidos.Text;
                cliente.DirCliente = txtDireccion.Text;
                cliente.TelCliente = txtTelefono.Text;
                cliente.CelCliente = txtCelular.Text;

                //Validación - Datos obligaatorios a ingresar
                if (txtNombres.Text == "")
                {
                    MessageBox.Show("Falta Ingresar Nombre", "Aviso del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    txtNombres.Focus();
                    return;
                }

                if (txtApellidos.Text == "")
                {
                    MessageBox.Show("Falta Ingresar Apellidos", "Aviso del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    txtApellidos.Focus();
                    return;
                }

                if (txtTelefono.Text == "")
                {
                    MessageBox.Show("Falta Ingresar Telefono", "Aviso del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    txtTelefono.Focus();
                    return;
                }

                // Si es que la caja de texto se encuentra vacio se hace referencia al evento InsertarRegistro(cliente) que se encuentra en la clase ClsClienteDAL
                if (txtID.Text == "")
                {
                    ClsClienteDAL.InsertarRegistro(cliente);
                    MessageBox.Show("Registro guardado correctamente", "Aviso del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

                // Si es que la caja de texto se encuentra distinto a vacio se hace referencia al evento ActualizarRegistro(cliente, Convert.ToInt32(txtID.Text)) que se encuentra en la clase ClsClienteDAL
                if (txtID.Text != "")
                {
                    ClsClienteDAL.ActualizarRegistro(cliente, Convert.ToInt32(txtID.Text));
                    MessageBox.Show("Registro Actualizado correctamente","Aviso del Sitema", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

                //Invoco al evento LimpiarCtrl(), y vuelvo a cargar la grilla
                LimpiarCtrl();
                dgv_cliente.DataSource = ClsClienteDAL.ClienteAll();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }            
        }

Evento clic de botón eliminar, capturamos el id e invocamos el evento ElimarRegistro(id).
private void btnEliminar_Click(object sender, EventArgs e)
        {
            DataGridViewRow row = dgv_cliente.CurrentRow as DataGridViewRow;
            //Validación
            if (row != null)
            {
                //Capturamos id de la grilla
                int id = Convert.ToInt32(row.Cells["id"].Value);
                //Invocamos el evento para la eliminación
                ClsClienteDAL.ElimarRegistro(id);
                //(Refrescar) Vuelvo a cargar la grilla
                dgv_cliente.DataSource = ClsClienteDAL.ClienteAll();
            }
        }