C# MultipleForms: Aplicación básica compuesta de varias ventanas

Es raro que una aplicación se base en una sola ventana, la mayoría cargan otros formularios, vistas, grids partiendo del form inicial.  Hasta ahora hemos visto como crear un form al vuelo en tiempo de ejecución colocando los controles de la ventana secundaria mediante programación (Ver C# Creación de Formularios y controles básicos). Esto es inviable en una aplicación medianamente compleja (posicionar los controles unos respecto a otros, el aspecto y un montón de atributos a tomar en cuenta de cada control). Lo mejor es añadir un item con la opción de menú Project > Add > New Item y añadir un nuevo form que cargaremos desde el principal con un botón.

csharp1

El IDE genera todos los archivos necesarios y se genera un Form1.cs donde podemos definir el aspecto de la nueva ventana en la pestaña Design.

Al evento de click del botón del forma principal añadimos el código para carga el form nuevo:


void Button1Click(object sender, EventArgs e)
{
Form1 secondForm;

secondForm=new Form1();

//se puede poner todo en una linea
//Form1 secondForm = new Form1();

secondForm.Show();

}

El momento de cargar Form1 vamos a aprovechar el constructor de la clase para alimentar un control DataGridView con el contenido de una tabla creada con SQLite (aprovechamos la BD creada C# SQLiteBook: Catalogo de libros con SQLite (I))

csharp2

 

 /*
  * Created by SharpDevelop.
  * User: i.landajuela
  * Date: 08/09/2016
  * Time: 19:02
  * 
  * To change this template use Tools | Options | Coding | Edit Standard Headers.
  */
 using System;
 using System.Drawing;
 using System.Windows.Forms;
 
 using System.Data.SQLite;
 using System.IO;
 
 
 
 namespace MultipleForms
 {
     /// <summary>
     /// Description of Form1.
     /// </summary>
     public partial class Form1 : Form
     {
         
         
         public Form1()
         {                        
             InitializeComponent();
             
             //dataGridView1.Rows.Add(new object[] { "Uno", "Dos" });                        
             SQLiteConnection conexion; //Clase para establecer conexión inicial
             SQLiteCommand cmd; //Clase para ejecutar sentencias
                         
             try
             {
             
                 conexion = new SQLiteConnection
                     ("Data Source=ejemplo01.sqlite;Version=3;New=True;Compress=True;");
                 
                 conexion.Open();
                 
                 string consulta = "select * from books";
                 
                 cmd = new SQLiteCommand(consulta, conexion);
                 SQLiteDataReader datos = cmd.ExecuteReader();
                 
                 //Console.WriteLine("Nº campos registros: "+datos.FieldCount);
                 
                 if (datos.HasRows) 
                 {                    
                     //MessageBox.Show("La consulta retorna registros","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
                 }
                 else
                 {
                     MessageBox.Show("La consulta no retorna registros","Error",MessageBoxButtons.OK,MessageBoxIcon.Error);                    
                 }
                 
                 while (datos.Read())
                 {
                     DataGridViewRow row = new DataGridViewRow();            
                     
                     string name = Convert.ToString(datos[0]);
                     string autor = Convert.ToString(datos[1]);
                     string genre = Convert.ToString(datos[2]);
                     string summary = Convert.ToString(datos[3]);
                     
                     row.CreateCells(dataGridView1);            
                     row.Cells[0].Value=name;
                     row.Cells[1].Value=name;
                     row.Cells[2].Value=genre;
                     row.Cells[3].Value=summary;
                     this.dataGridView1.Rows.Add(row);
                 }
                 
                 conexion.Close();
             }
             catch (Exception e)
             {                
                 MessageBox.Show("Error" + e.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);                                    
             }
             
         }                
     }
 } 

 

Anuncios

C# SQLiteBook: Catalogo de libros con SQLite (II)

Partiendo del post C# SQLiteBook: Catalogo de libros con SQLite (I) donde se creo una BD con SQLiteConnection  para guardar en la tabla books registros de un catálogo de libros usando  SQLiteCommand y sentencias INSERT SQL.

Ahora vamos a ver como realizar consultas SELECT sobre la misma tabla para leer los registros.

La primera parte del programa es igual que el anterior, consiste en usar el objeto  SQLiteConnection (pasandole la cadena de conexión al constructor) para abrir la conexión con la BD usando el método Open().

Luego utiliza el objeto  SQLiteCommand como antes pero para lanzar una consulta SELECT que retorne todos los registros de la tabla books.

El resultado de la consulta se almacena en una variable que contiene una instancia de la clase  SQLiteDataReader (ojo que no llama a constructor sino que se crea la instancia directamente usando la llamada  ExecuteReader de SQLiteCommand). Podemos consultar la sintaxis en MSDN Clase SqlDataReader.

A continuación vamos llamando al método Read() para ir leyendo de forma secuencial registros de la consulta. El método Read avanza el lector al siguiente registro, retorna TRUE si existen más registros. Podemos obtener los valores del registro que están almacenados en un Array usando índices numéricos o el nombre de columna (más adecuado), en el ejemplo se usan índices numéricos y convierte los valores a cadena usando el objeto Convert.

Enlaces relacionados:


 /*
  * Created by SharpDevelop.
  * User: i.landajuela
  * Date: 29/08/2016
  * Time: 14:47
  * 
  * To change this template use Tools | Options | Coding | Edit Standard Headers.
  */
 using System;
 using System.Data.SQLite;
 
 namespace SQLiteBookReader
 {
     class Program
     {
         public static void Main(string[] args)
         {
             try {
                 SQLiteConnection conexion = new SQLiteConnection 
                     ("Data Source=ejemplo01.sqlite;Version=3;New=False;Compress=True;");            
             
                  conexion.Open();
                  
                  // Lanzamos la consulta y preparamos la estructura para leer datos             
                 string consulta = "select * from books";
                 SQLiteCommand cmd = new SQLiteCommand(consulta, conexion);
                 SQLiteDataReader datos = cmd.ExecuteReader();
                 // Leemos los datos de forma repetitiva 
 
                 Console.WriteLine("Nº campos registros: "+datos.FieldCount);
                 
                 if (datos.HasRows) 
                 {
                     Console.WriteLine("La consulta retorna registros");
                 }
                 
                 while (datos.Read())
                 {
                     // Usamos objeto Convert 
                     string name = Convert.ToString(datos[0]);
                     string autor = Convert.ToString(datos[1]);
                     string genre = Convert.ToString(datos[2]);
                     string summary = Convert.ToString(datos[3]);
 
                     // Y los mostramos 
                     System.Console.WriteLine("Name: {0}, Autor: {1}, Genre: {2}, Summary: {3}",
                         name, autor, genre, summary);
                 }
                 // Finalmente, cerramos la conexion 
                 conexion.Close();
             
             } catch (Exception e) {
                     Console.WriteLine("{0} Exception caught.", e);
                     Console.Write("Press any key to exit . . . ");
                     Console.ReadKey(true);
                     return;
             }            
             
             Console.Write("Press any key to continue . . . ");
             Console.ReadKey(true);
         }
     }
 }

 

 

 

C# SQLiteBook: Catalogo de libros con SQLite (I)

SQLite es un sistema de gestión de base de datos empotrada en la propia aplicación mediante librerías, esto lo convierte en altamente portable entre máquinas ya que no dependemos de servidores de bases de datos externos y las tablas se guardan en ficheros (ver más en SQLite Base de datos embebida para C).

En SharpDevelop para poder usar SQLite debemos añadir el paquete primero. En el menú seleccionamos Project > Manage Packages.

sharp11

Una vez instalado ya podemos incluirlo en nuestra aplicación:

using System;
using System.Data.SQLite;
using System.IO; 

Antes de poder empezar a trabajar con la BD (Base de Datos) debemos conectar con ella usando el objeto  SQLiteConnection  en una variable. Cuando llamamos al constructor debemos proporcionarle la cadena de conexión con el fichero que contiene la BD entre otros parámetros, después de instanciar el objeto en la variable que contiene la conexión llamamos al método Open() para comenzar a trabajar con la BD.


SQLiteConnection conexion; conexion = new SQLiteConnection

("Data Source=ejemplo01.sqlite;Version=3;New=True;Compress=True;");

conexion.Open();

En la mayoría de los casos trabajaremos sobre una BD ya creada pero si es la primera que vez que ejecutamos la aplicación normalmente el fichero con la BD no existirá y debemos ejecutar sentencias SQL adicionales para crear las tablas usando la clase SQLiteCommand.

 if (!File.Exists("ejemplo01.sqlite"))
             {
                 string creacion = "create table books ("
                 + " title varchar(50),autor varchar(50),genre varchar(50), summary varchar(50));";
                 cmd = new SQLiteCommand(creacion, conexion);
                 cmd.ExecuteNonQuery();
             }

A continuación dejamos el código completo con las sentencias insert en la BD con los datos introducidos por el usuario (usando la variable cmd de tipo SQLiteCommand con sentencias Insert SQL).

Cuando acabamos de trabajar con la BD debemos cerrar la conexión de forma explicita con el método Close() de  SQLiteCommand .

 /*
  * Created by SharpDevelop.
  * User: i.landajuela
  * Date: 28/08/2016
  * Time: 4:09
  * 
  * To change this template use Tools | Options | Coding | Edit Standard Headers.
  */
 using System;
 using System.Data.SQLite;
 using System.IO;
 
 namespace SQLiteBook
 {
     class Program
     {
         public static void Main(string[] args)
         {
             SQLiteConnection conexion; //Clase para establecer conexión inicial
             SQLiteCommand cmd; //Clase para ejecutar sentencias
             
             try
             {
             
                 conexion = new SQLiteConnection
                     ("Data Source=ejemplo01.sqlite;Version=3;New=True;Compress=True;");
                 conexion.Open();    
             
                 if (!File.Exists("ejemplo01.sqlite"))
                 {
                     string creacion = "create table books ("
                         + " title varchar(50),autor varchar(50),genre varchar(50), summary varchar(50));";
                     cmd = new SQLiteCommand(creacion, conexion);
                     cmd.ExecuteNonQuery();
                 }
             
                 string line;
                 string title = "",
                    autor = "",
                    genre = "",
                    summary = "";
                 do
                 {
                     Console.Write("Title: ");
                     line = Console.ReadLine();
                     if (line != null)
                         title = line;
 
                     Console.Write("Autor: ");
                     line = Console.ReadLine();
                     if (line != null)
                         autor = line;
 
                     Console.Write("Genre: ");
                     line = Console.ReadLine();
                     if (line != null)
                         genre = line;
 
                     Console.Write("Summary: ");
                     line = Console.ReadLine();
                     if (line != null)
                         summary = line;
 
                     string insercion = "insert into books values ('" + title +
                         "', '" + autor + "','" + genre + "', '" + summary + "')";
 
                     cmd = new SQLiteCommand(insercion, conexion);
                     cmd.ExecuteNonQuery();
 
                     Console.WriteLine("Insert OK!");
                 }
                 while (line != null);
             
                 conexion.Close();
              }
             catch (Exception e)
             {
                 Console.WriteLine("Error" + e.Message);
             }
             
             Console.Write("Press any key to continue . . . ");
             Console.ReadKey(true);
         }
     }
 } 

 

Artículos relacionados: