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í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í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í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.