|
Ver temas sin respuesta | Ver temas activos
Foros Linux » Desarrollo » Programación
Página 1 de 1
|
[ 8 mensajes ] |
|
| Autor |
Mensaje |
adrianeric

Forista Nuevo
Registrado: Mié Feb 16, 2011 1:07 pm Mensajes: 6
|
 Publicado: Mié Feb 16, 2011 1:11 pm |
|
|
Cuento mi problema, antes aclaro que mis conocimientos en C# son muy basicos y quizas por eso es esta duda (vengo de VB.NET) y ahora estoy desarrollando con monodevelop y GTK2 pero en c#. La historia es así, tengo un formulario (clase) llamada Form1 el cual tiene un control o widget que es un lista (treeview en GTK), dentro de la clase Form1 hay un metodo que "llena" este control con datos desde mysql. Cuando necesito agregar un item a este control, abro otro formulario llamado Form2 el cual lleno con datos y al darle en el boton aceptar graba el nuevo registro en la base de datos, pero en esta parte necesito volver a llenar el control (treeview) con los datos actualizados desde la BD pero no puedo acceder desde el método dentro de Form2 al método que necesito y que está dentro de Form1, todo está declarado como public y tbien intenté declarar como static pero no logro lo mismo acceder. Alguien me puede orientar o remitirme a algun ejemplo o algo?, mi aplicacion está casi terminada, pero me trabó esta tontera.
|
|
|
|
 |
akodo

Moderador
Registrado: Mié Nov 28, 2007 12:00 am Mensajes: 1361 Ubicación: En la X del explorer (pulse para llamar)
|
 Publicado: Mié Feb 16, 2011 3:59 pm |
|
|
Yo pondría algún "mensaje de control" para saber que el método se ejecuta. Lo típico: "ejecutando el método1 de la clase Bla", lo sacas por pantalla y así al menos sabes que el método se ejecuta.
En cuanto a la base de datos, revisa que se guardan los cambios nada más acabar con el formulario, porque quizás lo que estés haciendo es encargar la operación pero no se llega a llevar a cabo, con lo que a la hora de obtener los datos sacas los mismo que la última vez.
Otra opción es que la base de datos se actualice correctamente, obtengas bien los datos, pero no llegues a mostrarlos. A la hora de actualizar los datos que se muestran, es posible que tengas que indicar a GTK que los datos han cambiado y que tiene que volver a mostrarlos repintando la pantalla.
Realmente me extraña que no puedas acceder al método teniendolo como public. Tampoco tengo experiencia con C#, pero el error que te muestra y el código que tienes puede resultar de gran ayuda para resolver el problema. Sin dar más datos, lo que he puesto es lo que se me ocurre que puede estar pasando.
Un saludo.
_________________ Descargue el gestor de mp3 "Music Manager" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)
|
|
|
|
 |
adrianeric

Forista Nuevo
Registrado: Mié Feb 16, 2011 1:07 pm Mensajes: 6
|
 Publicado: Dom Feb 20, 2011 8:18 pm |
|
|
Verifique satisfactoriamente que los nuevos datos se graben en la base de datos (pero eso lo hago desde la clase Form2 directamente), lo que necesito es actualizar los datos en el treeview con los datos recien actualizados desde la base de datos, esto lo hago con un metodo que se encuentra en la clase Form1 que siempre ha estado abierta. En otro foro me dijeron que haga una referencia en el Form2 al Form1, eso hice y así almenos me aparecen listados los metodos que estan en Form1 (antes ni eso sucedía), pero cuando hago dentro del metodo que esta dentro del Form2: Form1.LlenadoTreeView() mi aplicación se cierra inesperadamente, ya verifiqué y no se logra ejecutar ni una istrucción del metodo al que llamo (LlenadoTreeView), el problema es de ambito de vida de los metodos y clases creo, al compilar la aplicación, el compilador no encuentra error alguno, esto es obvio pues no podría haber ejecutado la aplicación nunca. La verdad el tema es bastante frustrante.
|
|
|
|
 |
akodo

Moderador
Registrado: Mié Nov 28, 2007 12:00 am Mensajes: 1361 Ubicación: En la X del explorer (pulse para llamar)
|
 Publicado: Lun Feb 21, 2011 3:44 pm |
|
|
Algún error debería mostrar, ¿no?, al menos en tiempo de ejecución. Postea el error a ver si sacamos algo.
Prueba a poner algún mensaje por consola en el método, y asegurate de hacer un "flush" (o algo similar) para forzar el vaciado del buffer y que el mensaje se muestre. Es posible que, si has puesto un mensaje y el error ocurre justamente después, el mensaje no se muestre porque ha quedado en el buffer.
Si puedes dejar el código de los dos forms es posible que vea algo más.
_________________ Descargue el gestor de mp3 "Music Manager" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)
|
|
|
|
 |
adrianeric

Forista Nuevo
Registrado: Mié Feb 16, 2011 1:07 pm Mensajes: 6
|
 Publicado: Mar Feb 22, 2011 3:09 pm |
|
|
namespace GestionRRHH_mono_Stetic { public partial class Form2 : Gtk.Window { public ListStore ListstoreEmpleados, liststoreMarcaciones; bool EsfilaNueva = false; public TreePath TreepathSeleccionado; string LegajoNuevo, FechaNueva, HoraNueva, NotaNueva; MessageDialog dialogoPregunta; bool EstadoEmpleadosActivos; bool EstadoEmpleadosInactivos; public Form2 () : base(Gtk.WindowType.Toplevel) { this.Build (); .... }
public void llenadoListaEmpleados() { //leo el estado de mis opciones en el menu EstadoEmpleadosActivos = VerEmpleadosActivosAction.Active; EstadoEmpleadosInactivos = VerEmpleadosInactivosAction.Active; //en SelectStr guardo la cadena SQL que extrae los datos de mi base de datos MySqlCommand Cmmd = new MySqlCommand(SelectStr, MainWindow.CnxGral); MySqlDataReader myReader = null; try { myReader = Cmmd.ExecuteReader(); } catch (MySqlException ex) { MainWindow.muestraDialogo("Error devuelto por BD", "Error Nº" +
ex.Number.ToString() + ": " + ex.Message, MessageType.Error); return; } //Lleno con datos el liststore correspondiente al la lista ListstoreEmpleados.Clear(); while (myReader.Read()) { ListstoreEmpleados.AppendValues(myReader["IdEmpleado"].ToString
(),myReader["apellido"].ToString(), myReader["nombre"].ToString()); } myReader.Close(); myReader.Dispose(); Cmmd = null; }
namespace GestionRRHH_mono_Stetic { public partial class Empleados : Gtk.Window {
string dniOriginal; public Form2 Frmprincipal; public Empleados () : base(Gtk.WindowType.Toplevel) { this.Build ();
this.btnAceptar.Clicked += HandleBtnAceptarhandleClicked; this.btnCancelar.Clicked += HandleBtnCancelarhandleClicked; TextIdCategoria.Changed += HandleTextIdCategoriaChanged; }
private void HandleBtnAceptarhandleClicked (object sender, EventArgs e) {
switch (this.Title.ToString()) { case "Alta de empleado":
AltaEmpleadoBD(); break;
case "Edición de empleado": IngresoEmpleadoEditado();
break; } }
public void AltaEmpleadoBD() { string nombre = null;
string apellido = null; string dni = null; nombre = this.TextNombre.Text; apellido = this.TextApellido.Text; dni = this.TextDNI.Text; //Controlo que los datos importantes no sean nulos
if (nombre.Length == 0 | apellido.Length == 0 | dni.Length == 0) {
MainWindow.muestraDialogo("Datos faltantes", "Los valores de Nombre, Apellido y DNI no pueden ser nulos\n" + "a la hora de ingresar un
nuevo empleado.", MessageType.Warning); return; } //Defino variables y les asigno valores para crear cadena SQL .... //Creo la cadena SQL correspondiente
string CadenaSQL = "INSERT INTO empleados" + "Nombre,Apellido,DNI,CUIL,Direccion,...)";
MySqlCommand comando = new MySqlCommand(CadenaSQL, MainWindow.CnxGral); try {
comando.ExecuteNonQuery(); } catch (MySqlException ex) {
MainWindow.muestraDialogo("Error devuelto por BD", ex.Number + ": " +
ex.Message, MessageType.Error); } comando = null;
this.Destroy();
Frmprincipal.llenadoListaEmpleados(); //aqui la aplicacion se cierra sin ningún mensaje de error } }
|
|
|
|
 |
akodo

Moderador
Registrado: Mié Nov 28, 2007 12:00 am Mensajes: 1361 Ubicación: En la X del explorer (pulse para llamar)
|
 Publicado: Mar Feb 22, 2011 4:02 pm |
|
Código: //leo el estado de mis opciones en el menu EstadoEmpleadosActivos = VerEmpleadosActivosAction.Active; EstadoEmpleadosInactivos = VerEmpleadosInactivosAction.Active; No veo que "VerEmpleadosActivosAction" ni "VerEmpleadosInactivosAction" estén declaradas PD: La próxima vez que postees código utiliza la etiqueta "[code]" para poder leerlo más fácilmente
_________________ Descargue el gestor de mp3 "Music Manager" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)
|
|
|
|
 |
adrianeric

Forista Nuevo
Registrado: Mié Feb 16, 2011 1:07 pm Mensajes: 6
|
 Publicado: Mié Feb 23, 2011 1:18 pm |
|
ah, ok, si perdon no sabía  , grcias, la prox vez posteo mejor. Solucioné el problema creando una nueva instancia del formulario1(en mi codigo llamado Form2  ) dentro del metodo que esta en la clase Empleados de la foma: Código: public void AltaEmpleadoBD() { ..... Form2 formulario = new Form2; formulario.Hide(); formulario.LlenadoListaEmpleados(); formulario.Destroy(); } y...así se refresca la lista aunque la pantalla se ensucia con el formulario que aparece y desaparece, lo que voy a probar es quitar la instrucción ShowAll() que se encuentra en el codigo generado al crear el formulario en el método Build() para que no se muestre el formulario al instanciarlo. Lamentablemente no me convence la solución pero el tiempo apremia y no puedo seguir dadole vueltas al tema, ya aprenderé la solución correcta y corregiré el codigo en su momento, te comento cdo pruebe si di con una solución mas limpia. Muchas gracias por tu preocupación. Saludos.
| Última edición por mcun el Mié Feb 23, 2011 1:18 pm, editado 1 vez en total |
| Tema unido |
|
|
|
|
 |
mcun

Moderador
Registrado: Dom Abr 18, 2010 4:30 pm Mensajes: 2790 Ubicación: En una de las nalgas del culo del mundo (según la Bersuit Vergarabat)
|
 Publicado: Mié Feb 23, 2011 1:21 pm |
|
|
adrianeric estas usando el botón nuevo mensaje en lugar de Publicar respuesta nuevo mensaje es para iniciar un tema nuevo para continuar con una conversación ya iniciada tienes que usar publicar una respuesta, de esa forma todos lo0s mensajes quedan unidos
saludos
_________________ ... reinstalar un SO cuando produce un error es como tirar un bebe a la basura cuando se hace caca..
Trusted Network and Developer | Reglamento General de los Foros |WIKI-EL | Twitter @SISIAM Debian| ArchLinux |Linux User #508809
|
|
|
|
 |
|
|
|
Página 1 de 1
|
[ 8 mensajes ] |
|
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados
No puede abrir nuevos temas en este Foro No puede responder a temas en este Foro No puede editar sus mensajes en este Foro No puede borrar sus mensajes en este Foro No puede enviar adjuntos en este Foro
|
|