Buen día.
Este es mi primer programita en C#, y la verdad no entiendo muchas cosas. Espero me puedan echar un cable :xD 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!
Me autorespondo. En C# no existe el patrón MVC, se usa MVVM y DataBinding. C# me parece un lenguaje muy moderno y completo, voy a seguir estudándolo.
Saludos weys.