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