Buen día.
Este es mi primer programita en C#, y la verdad no entiendo muchas cosas. Espero me puedan echar un cable
Por cierto, uso Visual Studio Express 2013, que está muy bonita xD
El programita es sencillo, solo registrará los datos de un trabajador en una tabla. Tengo las siguientes clases:
- Clase Trabajador (pojo). Este será el prototipo del trabajador, todos se crearán a partir de esta pojo.
- Clase MainWindow (Formulario)
- Clase Controller (Controlador del programa)
- Clase RegistrarTrabajador (Modelo del programa)
- Clase Conexion (Complemento del Modelo).
La idea es sencilla, estoy utilizando el patrón MVC, para conectar el Controlador con la vista y con el modelo. Ahora, el problema que tengo es el siguiente:
En Java, basta con pasarse la referencia del Controlador, al componente que efectuará el evento. bastaría con hacer:
public void setControlador(Controller controlador)
{
btnRegistrar.addActionListener(controlador);
btnNuevo.addActionListener(controlador);
btnSalir.addActionListener(controlador);
}
Luego, en la clase Controller:
private Formulario vista;
private Modelo modelo;
public Controller (Formulario vista, Modelo modelo)
{
this.vista = vista;
this.modelo = modelo;
}
@Override
{
// eventos
}
}
¿Cómo puedo lograr lo mismo en C#?
Clases Trabajador (Pojo), Controller (Controlador), RegistrarTrabajador (Modelo), Formulario : using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RegistroDeUsuarios.pojo
{
public class Trabajador
{
private string primerNombre;
private string segundoNombre;
private string primerApellido;
private string segundoApellido;
private string rangoTrabajador;
private string fechaNacimiento;
// setters
public void setPrimerNombre(string primerNombre)
{
this.primerNombre = primerNombre;
}
public void setSegundoNombre(string segundoNombre)
{
this.segundoNombre = segundoNombre;
}
public void setPrimerApellido(string primerApellido)
{
this.primerApellido = primerApellido;
}
public void setSegundoApellido(string segundoApellido)
{
this.segundoApellido = segundoApellido;
}
public void setRangoTrabajador(string rangoTrabajador)
{
this.rangoTrabajador = rangoTrabajador;
}
public void setFechaNacimiento(string fechaNacimiento)
{
this.fechaNacimiento = fechaNacimiento;
}
// getters
public string getPrimerNombre()
{
return this.primerNombre;
}
public string getSegundoNombre()
{
return this.segundoNombre;
}
public string getPrimerApellido()
{
return this.primerApellido;
}
public string getSegundoApellido()
{
return this.segundoApellido;
}
public string getRangoTrabajador()
{
return this.rangoTrabajador;
}
public string getFechaNacimiento()
{
return this.fechaNacimiento;
}
}
}
Clase Controllerusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using RegistroDeUsuarios.pojo;
namespace RegistroDeUsuarios
{
public class Controller
{
private MainWindow vista;
private RegistrarTrabajador modelo;
public Controller()
{
}
public Controller(MainWindow vista, RegistrarTrabajador modelo)
{
this.vista = vista;
this.modelo = modelo;
}
public void btnRegistrar_Click(Object sender, RoutedEventArgs e)
{
Trabajador trabajador
= new Trabajador
(); trabajador.setPrimerNombre(vista.txtPrimerNombre.Text);
trabajador.setSegundoNombre(vista.txtSegundoNombre.Text);
trabajador.setPrimerApellido(vista.txtPrimerApellido.Text);
trabajador.setSegundoApellido(vista.txtSegundoApellido.Text);
trabajador.setRangoTrabajador(vista.cboRangoTrabajador.SelectedItem.ToString());
trabajador.setFechaNacimiento(vista.txtFechaNacimiento.Text);
modelo.registrarTrabajador(trabajador);
}
public void btnNuevo_Click(Object sender, RoutedEventArgs e)
{
vista.clean();
}
public void btnSalir_Click(Object sender, RoutedEventArgs e)
{
//Application.Current.Shutdown();
}
}
}
Clase RegistrarTrabajador:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
using RegistroDeUsuarios.pojo;
namespace RegistroDeUsuarios
{
public class RegistrarTrabajador
{
public static MySqlConnection conexion
= new MySqlConnection
(); public static MySqlCommand comando
= new MySqlCommand
(); public static string CadenaDeConexion;
public void registrarTrabajador(Trabajador trabajador)
{
// Aquí se llevara a cabo la conexion
CadenaDeConexion = "Server=localhost;"
+ "Port=3307;"
+ "Database=mysql_ifxperu;"
+ "Uid=root;"
+ "Password=";
try
{
conexion.ConnectionString = CadenaDeConexion;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
try
{
// Abrimos la conexión
conexion.Open();
// Definimos nuestro Query
string query = "insert into empleados VALUES('"+trabajador.getPrimerNombre()+"','"+trabajador.getSegundoNombre()+"','"+trabajador.getSegundoApellido()+"','"+
trabajador.getSegundoApellido()+"','"+trabajador.getRangoTrabajador()+"','"+trabajador.getFechaNacimiento()+"')";
// Establecemos cuál será la conexión
comando.Connection = conexion;
// Determinamos el comando [ nuestro query]
comando.CommandText = query; //Se le asigna la consulta
// Asignamos al objeto MySqlReader la ejecución del comando
// En otras palabras, el resultado de la consulta [query]
// Se guardará en el MySqlReader
comando.ExecuteNonQuery();
MessageBox.Show("Alta del empleado satisfactoria.");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally {
conexion.Close();
}
}
}
}
Clase Formulariousing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace RegistroDeUsuarios
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
cboRangoTrabajador.Items.Add("Administrador");
cboRangoTrabajador.Items.Add("Vendedor");
cboRangoTrabajador.Items.Add("Contador");
cboRangoTrabajador.Items.Add("Tecnico Mantenimiento");
cboRangoTrabajador.Items.Add("Programador");
cboRangoTrabajador.Items.Add("Analista");
cboRangoTrabajador.SelectedIndex = 0;
}
public void setControlador(Controller controlador)
{
controlador
.btnRegistrar_Click(controlador,
new RoutedEventArgs
()); controlador
.btnNuevo_Click(controlador,
new RoutedEventArgs
()); controlador
.btnSalir_Click(controlador,
new RoutedEventArgs
()); }
public void clean()
{
txtPrimerNombre.Clear();
txtSegundoNombre.Clear();
txtPrimerApellido.Clear();
txtSegundoApellido.Clear();
txtFechaNacimiento.Clear();
cboRangoTrabajador.SelectedItem = "Administrador";
txtPrimerNombre.Focus();
}
}
}
*** UPDATE ***
He creado una clase principal, que sustituye al Main que genera WPF.
using System.Windows.Media.Imaging;
using System.Windows.Media.Media3D;
using System.Windows.Media.TextFormatting;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Shell;
namespace RegistroDeUsuarios
{
class Principal
{
// <summary>
/// Application Entry Point.
/// </summary>
[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public static void Main()
{
MainWindow vista
= new MainWindow
(); RegistrarTrabajador modelo
= new RegistrarTrabajador
(); Controller control
= new Controller
(vista, modelo
); vista.setControlador(control);
MessageBox.Show("Hola");
RegistroDeUsuarios
.App app
= new RegistroDeUsuarios
.App(); app.InitializeComponent();
app.Run();
}
}
}
Otra duda, quiero colocar un método en el Formulario, para arrancar la aplicación a demanda. Esto porque en el Main crearé los objetos MainWindow y RegistrarTrabajador, para pasárselos al Controller, para que se asocie a las 2 clases, y el objeto Controller pasárselo por medio de setControlador(Controller controlador) al Formulario. ¿Cómo haría?
Muchas gracias!