Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Portada » Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 8 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Mié Feb 16, 2011 9:07 pm
Mensajes: 6

Nota Publicado: Mié Feb 16, 2011 9:11 pm 
Arriba  
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.

 Perfil  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 8:00 am
Mensajes: 1457
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Mié Feb 16, 2011 11:59 pm 
Arriba  
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)

 Perfil  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Mié Feb 16, 2011 9:07 pm
Mensajes: 6

Nota Publicado: Lun Feb 21, 2011 4:18 am 
Arriba  
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.

 Perfil  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 8:00 am
Mensajes: 1457
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Lun Feb 21, 2011 11:44 pm 
Arriba  
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)

 Perfil  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Mié Feb 16, 2011 9:07 pm
Mensajes: 6

Nota Publicado: Mar Feb 22, 2011 11:09 pm 
Arriba  
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
}
}

 Perfil  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 8:00 am
Mensajes: 1457
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Mié Feb 23, 2011 12:02 am 
Arriba  
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)

 Perfil  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Mié Feb 16, 2011 9:07 pm
Mensajes: 6

Nota Publicado: Mié Feb 23, 2011 9:18 pm 
Arriba  
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 :D ) 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 9:18 pm, editado 1 vez en total
Tema unido

 Perfil  

Desconectado
Administrador
Administrador
Avatar de Usuario

Registrado: Lun Abr 19, 2010 12:30 am
Mensajes: 3888
Ubicación: En una de las nalgas del culo del mundo (según la Bersuit Vergarabat)

Nota Publicado: Mié Feb 23, 2011 9:21 pm 
Arriba  
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

_________________
Los programadores de verdad no documentan. La documentación es para los idiotas que no pueden leer un volcado de memoria.

Trusted Network and Developer | Lee el Reglamento !! |WIKI-EL | Twitter @mr_mcun
Debian + TTY | ArchLinux + awesome | openSUSE + Gnome-Shell | Linux User #508809

 Perfil WWW  
Mostrar mensajes previos:  Ordenar por  
 [ 8 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


 Temas relacionados   Autor   Respuestas   Vistas   Último mensaje 
Cómo acceder a los métodos de otra Clase? [SOLUCIONADO...ESO CREÍA]

en Programación

cerenkov

14

2025

Mar Oct 04, 2011 3:59 pm

cerenkov Ver último mensaje

Instanciar clase padre en clase hija (PHP) (SOLUCIONADO)

en Programación

greer

2

1474

Sab Jul 13, 2013 1:28 am

greer Ver último mensaje

Clase Matriz incipiente: C++

en Programación

cerenkov

0

6643

Sab Ago 28, 2010 4:04 am

cerenkov Ver último mensaje

¿Qué Clase de Linux usar?

en El Café

megaMIMT

3

621

Mar Oct 24, 2017 10:20 pm

doc Ver último mensaje

¿Qué clase de respuesta es esta? [Solucionado]

en Sistema

Arthigus

6

1548

Lun May 24, 2010 8:43 pm

Arthigus Ver último mensaje



¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC + 1 hora [ DST ]
Traducción al español por Huan Manwë
phpBB SEO