jueves, 18 de septiembre de 2014

El Demo del Día: Copiar Datos de Excel en el DataGridView de WinForms

Copiar Datos de Excel en el DataGridView de WinForms

Después de un tiempo, volvemos a publicar un nuevo Demo, esta vez a pedido de un alumno, que desea copiar que su aplicación tenga la funcionalidad de copiar datos de la Grilla (DataGridView) a Excel (esto es automático, no es necesario programar nada) y desde Excel hacia la aplicación (esto si requiere de programar usando el objeto Clipboard de WinForms).

Como siempre nuestro desarrollo lo haremos con Listas de Objetos (como debe ser para ahorrar memoria y no con DataSet), ademas usaremos Reflection para convertir los datos que vienen como cadenas desde Excel al tipo de datos adecuado del objeto.

Crear una Aplicación Windows Forms en C#

Crear un nuevo proyecto de tipo Windows Forms y llamarle "CopiarExcel". Cambiarle de nombre al formulario por el de "frmProducto".

Crear la clase: "beProducto" para la lista de objetos

using System;
namespace CopiarExcel
{
    public class beProducto
    {
        public int IdProducto { get; set; }
        public string Nombre { get; set; }
        public decimal Precio { get; set; }
        public short Stock { get; set; }
    }
}

Agregar un control DataGridView sobre el formulario, cambiarle al nombre de "dgvProducto" y acoplarlo para que se vea similar a la siguiente figura:


Escribir el siguiente código en el formulario:

using System.IO;
using System.Reflection;

namespace CopiarExcel
{
    public partial class frmProducto : Form
    {
        private List<beProducto> lbeProducto;

        public frmProducto()
        {
            InitializeComponent();
        }

        private void cargarProductos(object sender, EventArgs e)
        {
            lbeProducto = new List<beProducto>();
            Random oRandom = new Random();
            beProducto obeProducto;
            for(int i=1;i<=10;i++)
            {
                obeProducto = new beProducto();
                obeProducto.IdProducto = i;
                obeProducto.Nombre = String.Format("Producto {0}", i);
                obeProducto.Precio = oRandom.Next(100)+10;
                obeProducto.Stock = (short)(oRandom.Next(10) + 1);
                lbeProducto.Add(obeProducto);
            }
            dgvProducto.DataSource = lbeProducto;
        }

        private void pegarExcel(object sender, KeyEventArgs e)
        {
            if (e.Control && e.KeyCode == Keys.V)
            {
                string formato = DataFormats.CommaSeparatedValue;
                object contenido = Clipboard.GetData(formato);
                if (contenido != null && contenido is MemoryStream)
                {
                    byte[] buffer;
                    using (MemoryStream ms = (MemoryStream)contenido) buffer = ms.ToArray();
                    string lista = Encoding.UTF8.GetString(buffer).Replace("\r\n", ",");
                    string[] data = lista.Split(',');
                    PropertyInfo[] propiedades = lbeProducto[0].GetType().GetProperties();
                    if ((data.Length - 1) % propiedades.Length == 0)
                    {
                        beProducto obeProducto = null;
                        PropertyInfo propiedad;
                        int c = 0;
                        Type tipo = null;
                        while (c < data.Length - 1)
                        {
                            for (int i = 0; i < propiedades.Length; i++)
                            {
                                if (i == 0) obeProducto = new beProducto();
                                propiedad = obeProducto.GetType().GetProperty(propiedades[i].Name);
                                tipo = propiedad.PropertyType;
                                propiedad.SetValue(obeProducto, Convert.ChangeType(data[c], tipo));
                                if (i == propiedades.Length - 1) lbeProducto.Add(obeProducto);
                                c++;
                            }
                        }
                        dgvProducto.DataSource = null;
                        dgvProducto.DataSource = lbeProducto;
                    }
                    else MessageBox.Show
                    ("Numero de columnas a copiar del Excel y la Grilla deben ser iguales");
                }
                else MessageBox.Show("No hay un rango de celdas a copiar");
            }
        }
    }
}

Nota: Para copiar desde Excel a la grilla se debe pulsar la tecla Ctrl + V y la cantidad de columnas debe ser la misma que la de la grilla (en realidad la de las propiedades de la clase beProducto o la que fuera).

Probar la Aplicación Creada

Grabar el proyecto y ejecutarlo con F5. Se mostrará la siguiente ventana con los datos de los productos creados en el evento Load del formulario:


Crear un archivo de Excel con la misma estructura de los Productos, tal como se muestra a continuación:


Copiar (Ctrl + C) el rango de celdas que se desea llevar a la aplicación (sin incluir las cabeceras) y en cualquier celda de la grilla Pegar (Ctrl + V), y se copiaran los registros seleccionados en Excel, tal como se muestra a continuación:


Si desean se puede ir copiando por partes (filas) pero si es necesario seleccionar todas las columnas, ya que el objeto necesita de valores.

Nota: El procedimiento contrario, es decir desde la Aplicación (DataGridView) a Excel es automatico, solo hay que marcar el rango de celdas del DataGridView, Ctrl + C y luego en Excel Ctrl + V.

Comentario Final

En este post hemos visto como agregar la funcionalidad de Copiar Datos Externos a la aplicación, en este caso desde Excel, pero el procedimiento sera similar desde cualquier origen. Para ello hemos usado el objeto ClipBoard y para trabajar con objetos hemos usado Reflection, lo que quiere decir que el demo lo puedes probar con cualquier objeto que definan.

Saludos a todos los visitantes asiduos del Blog y ya saben que pueden hacer sus pedidos en los comentarios.

Descarga:




El Libro del Día: Programming Microsoft ASP.NET 4

El Libro del Día: 2014-09-18

Titulo: Programming Microsoft ASP.NET 4
Autor: Dino Esposito
Editorial: Microsoft
Nro Paginas: 988

Capítulos:
Part I The ASP.NET Runtime Environment
1 ASP.NET Web Forms Today
2 ASP.NET and IIS
3 ASP.NET Configuration
4 HTTP Handlers, Modules, and Routing
Part II ASP.NET Pages and Server Controls
5 Anatomy of an ASP.NET Page
6 ASP.NET Core Server Controls
7 Working with the Page
8 Page Composition and Usability
9 ASP.NET Input Forms
10 Data Binding
11 The ListView Control
12 Custom Controls
Part III Design of the Application
13 Principles of Software Design
14 Layers of an Application
15 The Model-View-Presenter Pattern
Part IV Infrastructure of the Application
16 The HTTP Request Context
17 ASP.NET State Management
18 ASP.NET Caching
19 ASP.NET Security
Part V The Client Side
20 Ajax Programming
21 jQuery Programming

Descarga:
Programming_Microsoft_ASPNET_4

miércoles, 17 de septiembre de 2014

El Libro del Día: ASP.NET 4.0 in Practice

El Libro del Día: 2014-09-17

Titulo: ASP.NET 4.0 in Practice
Autor: Daniele Bochicchio, Stefano Mostarda, Marco De Sanctis
Editorial: Manning
Nro Paginas: 506

Capítulos:
PART 1 ASP.NET FUNDAMENTALS
1 Getting acquainted with ASP.NET 4.0
2 Data access reloaded: Entity Framework
3 Integrating Entity Framework and ASP.NET
PART 2 ASP.NET WEB FORMS
4 Building the user interface with ASP.NET Web Forms
5 Data binding in ASP.NET Web Forms
6 Custom controls
7 Taking control of markup
PART 3 ASP.NET MVC
8 Introducing ASP.NET MVC
9 Customizing and extending ASP.NET MVC
PART 4 SECURITY
10 ASP.NET security
11 ASP.NET authentication and authorization
PART 5 ADVANCED TOPICS
12 Ajax and RIAs with ASP.NET 4.0
13 State 348
14 Caching in ASP.NET
15 Extreme ASP.NET 4.0
16 Performance and optimizations

Descarga:
ASPNET_4.0_InPractice

martes, 16 de septiembre de 2014

El Libro del Día: Professional IIS 7 and ASP.NET Integrated Programming

El Libro del Día: 2014-09-16

Titulo: Professional IIS 7 and ASP.NET Integrated Programming
Autor: Shahram Khosravi
Editorial: Wrox
Nro Paginas: 699

Capítulos:
Chapter 1: IIS 7 and ASP.NET Integrated Architecture
Chapter 2: Using the Integrated Configuration System
Chapter 3: Managing the Integrated Configuration System from IIS Manager and the Command Line
Chapter 4: Managing the Integrated Configuration System with Managed Code
Chapter 5: Extending the Integrated Configuration System and Imperative Management API
Chapter 6: Understanding the Integrated Graphical Management System
Chapter 7: Extending the Integrated Graphical Management System
Chapter 8: Extending the Integrated Request Processing Pipeline
Chapter 9: Understanding the Integrated Providers Model
Chapter 10: Extending the Integrated Providers Model
Chapter 11: Integrated Tracing and Diagnostics
Chapter 12: ASP.NET and Windows Communication Foundation Integration in IIS 7

Descarga:
Professional_IIS7_ASP.NET_Integrated_Programming

lunes, 15 de septiembre de 2014

El Libro del Día: Expert Android

El Libro del Día: 2014-09-15

Titulo: Expert Android
Autor: Satya Komatineni, Dave MacLean
Editorial: Apress
Nro Paginas: 425

Capítulos:
Chapter 1: Exploring Custom Views
Chapter 2: Exploring Compound Controls
Chapter 3: Principles and Practice of Custom Layouts
Chapter 4: JSON for On-Device Persistence
Chapter 5: Programming for Multiple Devices
Chapter 6: Advanced Form Processing
Chapter 7: Using the Telephony APIs
Chapter 8: Advanced Debugging and Analysis
Chapter 9: Programming 3D Graphics with OpenGL
Chapter 10: Introduction to Android Search
Chapter 11: Simple Search Suggestion Provider
Chapter 12: Custom Search Suggestion Provider
Chapter 13: Introduction to Cloud Storage with Parse
Chapter 14: Enhancing Parse with Parcelables
Chapter 15: Exploring Push Notifications with Parse

Descarga:
Expert_Android

domingo, 14 de septiembre de 2014

El Libro del Día: Android Developer Tools Essentials

El Libro del Día: 2014-09-14

Titulo: Android Developer Tools Essentials
Autor: Mike Wolfson
Editorial: O'Reilly
Nro Paginas: 250

Capítulos:
1. Getting Started
2. Essential Tools
3. Configuring Devices and Emulators
4. Using Devices and Emulators
5. Developing with Eclipse
6. Developing with Android Studio
7. Testing Your Code
8. Simulating Events
9. Build Tools
10. Monitoring System Resources
11. Working with the User Interface
12. Using the Graphical Editor
13. Optimizing the User Interface

Descarga:
Android_Developer_Tools_Essentials

sábado, 13 de septiembre de 2014

El Libro del Día: Learning Android

El Libro del Día: 2014-09-13

Titulo: Learning Android
Autor: Marko Gargenta, Masumi Nakamura
Editorial: O'Reilly
Nro Paginas: 288

Capítulos:
1. Android Overview
2. Java Review
3. The Stack
4. Installing and Beginning Use of Android Tools
5. Main Building Blocks
6. Yamba Project Overview
7. Android User Interface
8. Fragments
9. Intents, Action Bar, and More
10. Services
11. Content Providers
12. Lists and Adapters
13. Broadcast Receivers
14. App Widgets
15. Networking and Web Overview
16. Interaction and Animation: Live Wallpaper and Handlers

Descarga:
Learning_Android