Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/02/2007, 13:51
Avatar de zacktagnan
zacktagnan
 
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años, 1 mes
Puntos: 3
Llamar a método de otra clase...

Hola a tod@s:

Tengo una página [adm_inspeli.aspx] en la que incluyo un control de usuario web [adm_info.ascx].

En [adm_inspeli.aspx] está el típico formulario para realizar un inserto, en este caso de una pelicula.
En la parte derecha de la pantalla, dentro de un div muestro el contenido de [adm_info.ascx]. Lo que hace este es indicar el número de registros en las tablas indicadas. Por ejemplo que en ese momentos hay tantas peliculas registradas,...

La cosa es que se accede a [adm_inspeli.aspx] para registrar una nueva película. En ese momento, a través del [adm_info.ascx] se observa que hay por ejemplo 11 películas en total.

Lo que quiero es que al pulsar el botón de [Insertar] del formulario de [adm_inspeli.aspx], se actualice la cuenta realizada dentro del [adm_info.ascx] y se muestre el nuevo total actual, en este caso 12 películas.

Estos son los códigos de los .cs de cada uno de los archivos:

[adm_inspeli.aspx.cs]
Código:
//...

namespace webvideoclub
{
	/// <summary>
	/// Descripción breve de adm_inspeli.
	/// </summary>
	public class adm_inspeli : System.Web.UI.Page
	{
		//...

		//CONEXIÓN A LA BASE DE DATOS db_videoclub
		protected SqlConnection conexion = new SqlConnection("server=EL_SERVIDOR;database=db_BASEDATOS;uid=sa");

		//...

		/* [ BOTÓN PARA INSERTAR PELÍCULA ] */
		// ==========================================
		private void btn_insPelicula_ServerClick(object sender, System.EventArgs e)
		{
			//...

			// SE EFECTÚA EL INSERTO EN LA TABLA PELICULAS
			string sql_InsPeli = "INSERT INTO PELICULAS (peli_id, peli_tit, ...) VALUES ('"+ vpeli_id +"', '"+ vpeli_tit +"', ...)";
			SqlCommand coman_IsnPeli = new SqlCommand(sql_InsPeli, conexion);

			try
			{
				conexion.Open();
				coman_IsnPeli.ExecuteNonQuery();
				conexion.Close();

				//...
			}
			catch(SqlException laexIsnPeli)
			{
				vinfo_insPeli += "Se ha producido un error al INSERTAR la pel&iacute;cula y el alta se ha cancelado:<br/>" + laexIsnPeli.Message;
			}
		}//fin de insertar peli

		//...

	}
}

[adm_info.ascx.cs]
Código:
namespace webvideoclub
{
	using System;
	using System.Data;
	using System.Data.SqlClient;//NECESARIO PARA CONEXIÓN Y ÓRDENES DE SQL
	using System.Drawing;
	using System.Web;
	using System.Web.UI.WebControls;
	using System.Web.UI.HtmlControls;

	/// <summary>
	///		Descripción breve de adm_info.
	/// </summary>
	public abstract class adm_info : System.Web.UI.UserControl
	{
		protected int vtot_pelis, ... ;
		//CONEXIÓN A LA BASE DE DATOS db_videoclub
		protected SqlConnection conex_info = new SqlConnection("server=EL_SERVIDOR;database=db_BASEDATOS;uid=sa");

		private void Page_Load(object sender, System.EventArgs e)
		{
			cargarInfo();
		}

		public void cargarInfo()
		{
			// TOTAL DE PELICULAS
			string sql_TotPelis = "SELECT COUNT(peli_id) FROM PELICULAS";
			SqlCommand coman_TotPelis = new SqlCommand(sql_TotPelis, conex_info);

			try
			{
				conex_info.Open();

				// TOTAL DE PELICULAS
				vtot_pelis = int.Parse((coman_TotPelis.ExecuteScalar()).ToString());

				conex_info.Close();
			}
			catch(SqlException ex_infoBD)
			{
				Response.Write("Se ha producido un error: " + ex_infoBD);
			}
		}//fin de cargarInfo()
	}
}

//...

¿Como llamar a cargarInfo() que está en adm_info.ascx.cs tras insertar la peli?

Desde mi nivel de principiante en este tipo de código se me había ocurrido a poner directamente así, tras ejecutar el Insert:

Código:
			try
			{
				conexion.Open();
				coman_IsnPeli.ExecuteNonQuery();
				conexion.Close();

				cargarInfo();
				//...
			}
			catch(SqlException laexIsnPeli)
			{
				vinfo_insPeli += "Se ha producido un error al INSERTAR la pel&iacute;cula y el alta se ha cancelado:<br/>" + laexIsnPeli.Message;
			}
Luego deduciendo que pertenece ó que está dentro de otra clase, la adm_info, me ha dado por poner así, aunque también da error:

Código:
			try
			{
				conexion.Open();
				coman_IsnPeli.ExecuteNonQuery();
				conexion.Close();

				adm_info.cargarInfo();
				//...
			}
			catch(SqlException laexIsnPeli)
			{
				vinfo_insPeli += "Se ha producido un error al INSERTAR la pel&iacute;cula y el alta se ha cancelado:<br/>" + laexIsnPeli.Message;
			}

¿Entonces cómo se hace esto? ¿Hay que cambiar por ejemplo de primeras las definiciones de los métodos y las variables y ponerlas a public?
¿Que otra cosa hay que hacer para que esto funcione...?

Gracias.
__________________
Saludos,

zacktagnan.
=================================================