Foros del Web » Programación para mayores de 30 ;) » .NET »

Herencia, HTML table Label

Estas en el tema de Herencia, HTML table Label en el foro de .NET en Foros del Web. Camaradas tengo un problema y ojala aca encuentre a alguien que me pueda ayudar, el problema es el siguiente, tengo varias paginas aspx, todas con ...
  #1 (permalink)  
Antiguo 10/07/2009, 13:38
 
Fecha de Ingreso: febrero-2003
Ubicación: chile
Mensajes: 101
Antigüedad: 21 años, 2 meses
Puntos: 1
Pregunta Herencia, HTML table Label

Camaradas tengo un problema y ojala aca encuentre a alguien que me pueda ayudar, el problema es el siguiente, tengo varias paginas aspx, todas con 2 tablas una tblError y otra tblSuccess, cada una un respectivo Label, ahora lo que estoy intentando hacer es que todas estas páginas heredn de una Clase (PaginaBase) y aqui crear los metodos para mostrar estas tablas y ocultar algo asi

Código:
public void ShowError(string messageId)
{
    ShowMessage(tblError, lblError, messageId);
}

protected void ShowMessage(HtmlTable table, Label label, string messageId)
{
    if (table != null)
        table.Visible = true;
    if (label == null)
        return;
    label.Text = messageId;
}
Ahora el problema es como declaro la Tabla HTML y el Label en la clase base lo eh probado de varias formas una de ellas es asi:

Código:
protected global::System.Web.UI.WebControls.Label lblError;
protected global::System.Web.UI.HtmlControls.HtmlTable tblError;
Pero no hay caso, cuando llamo al metodo la tabla esta NULL y el label NULL.
Pero en cambio si cambio los metodos o sea le mando las tablas y los labels directamente desde las páginas aspx funciona perfectamente. No como lo puedo hacer

Datos:
- Framework 2.0
- Cree la interfaz para el metodo ShowError(string messageId)
- En las declaraciones de la tabla y label el nombre es el mismo que los Id de estos en las páginas aspx
__________________
s[K]eL
  #2 (permalink)  
Antiguo 11/07/2009, 07:00
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 21 años, 9 meses
Puntos: 15
Respuesta: Herencia, HTML table Label

Trata poniendo en la interface 2 Propiedades que representen a los objetos que deseas manipular y las defines en la clase base.

Después deberás atar los controles a las propiedades antes de llamar a tu método ShowMessage() porque tu método ShowMessage hará uso de estas propiedades.

Estas propiedades deben estar declaradas en la clase base donde tiene el método ShowMessage().

Saludos,
  #3 (permalink)  
Antiguo 13/07/2009, 10:29
 
Fecha de Ingreso: febrero-2003
Ubicación: chile
Mensajes: 101
Antigüedad: 21 años, 2 meses
Puntos: 1
Respuesta: Herencia, HTML table Label

Cita:
Iniciado por dwaks Ver Mensaje
Trata poniendo en la interface 2 Propiedades que representen a los objetos que deseas manipular y las defines en la clase base.

Después deberás atar los controles a las propiedades antes de llamar a tu método ShowMessage() porque tu método ShowMessage hará uso de estas propiedades.

Estas propiedades deben estar declaradas en la clase base donde tiene el método ShowMessage().

Saludos,
A que te refieres con poner en la interface 2 Propiedades que representen a los objetos que deseas manipular y las defines en la clase base

en mi interfaz tengo lo siguiente
Código:
public interface IMessageDisplay
    {
        void ShowError(string messageId);
    }
Gracias...
__________________
s[K]eL
  #4 (permalink)  
Antiguo 14/07/2009, 20:37
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 21 años, 9 meses
Puntos: 15
Respuesta: Herencia, HTML table Label

Bueno hablemos un poco de lo que es Herencia en la programación orientada a objetos.

Puedes ver en tu página aspx en el código que es una clase que hereda de System.Web.UI.Page y esta clase sería la base dandole todo lo que se necesita para que trabaje con la funcionalidades necesarias.

Lo que quieres hacer tiene todo el sentido de organización y es buenisimo tener esa visión ahora bien el concepto de herencia no lo tienes muy claro.

Ahora te ayudaré un poco en la única limitante cuando trabajas con clases bases propias que no sea Page. Tienes varios puntos que debes tomar en cuenta:

1- Cuando quieras accesar a controles que no sean de la clase base
2- Seguir manteniendo las funcionalidades de la clase principal de una página aspx que es System.Web.UI.Page

Las respuestas seria así:
1- Cuando quieras manipular controles deberas crear propiedades en la clase base para que le pases por referencia el control a el que la clase base tendra acceso.

Solo debes crear una propiedad dentro de la clase base así:
private Label _errorControl;
public Label ErrorControl
{
get { return _errorControl; }
set { this._errorControl = value; }
}

Ya con esto dentro de la clase base tendrás con que interactuar aunque aun no este conectado a el Control de salida.

Cualquier método dentro de la clase base puede hacer uso de esta propiedad sin pensar que control es el que hará la salida real. Solo ten en cuenta que si no lo referencias será nulo.

Ejemplo, mira este método que estará dentro de la clase base que hará uso de la propiedad ErrorControl:

public void ShowError(string errorMsg)
{
this._errorControl.Text = errorMsg;
}

2- Tu clase base deberá heredar todo de System.Web.UI.Page así que lo unico que harás es quitarle a la página aspx que herede de System.Web.UI.Page y que en vez de esa utilize tu clase base que heredará de System.Web.UI.Page.

Ejemplo, pongamosle nombre a tu página aspx como Default.aspx y tu clase base se llamará PageBase.cs, ahora bien tu página hereda de PageBase:

public partial class Default : PageBase

y tu clase base hereda de System.Web.UI.Page:

public class PageBase : System.Web.UI.Page

-----

Ahora bien tienes que atar los cabos sueltos mirando la relación así:
1- La clase base de todo es System.Web.UI.Page
2- La extensión de la clase Page es tu clase base llamada PageBase
3- Todas tus páginas que quieras no re-escribir código para control de mensajes de error y mensajes generales puedes quitarle que hereden de System.Web.UI.page y que hereden de tu clase base PageBase que dará esta funcionalidad

la herencia se vería así:

System.Web.UI.Page -> PageBase -> Default

--------

Ahora solo queda la pregunta de como unir el control dentro de tu página Default a el que se manipula dentro de PageBase?? simple en el evento Load_Form dentro de Default.aspx haces esa union. Ejemplo, tu label de error y de Mensajes se llaman errorMsg y Msg, en el Load_Form se vería así:

protected void Page_Load(object sender, EventArgs e)
{
this.ErrorControl = this.errorMsg;
this.MessageControl = this.Msg;
}

Ahora ya podrás hacer uso de el método heredado ShowError dentro de Default.aspx sin necesidad de escribirlo denuevo. Espero que todo lo dije claro solo ten en cuenta lo siguiente:

1- La clase base debe heredar de System.Web.UI.Page
2- La clase base debe tener su propiedad que represente el control que quieras manipular
3- El metodo de la clase base hará uso de la propiedad de el control
4- En tu página Default en el Load_Form deberas hacer la union de tu control con el de la clase base para que el método ShowError no se encuentre con que la Propiedad ErrorControl esta nula.

Saludos,
  #5 (permalink)  
Antiguo 15/07/2009, 08:05
 
Fecha de Ingreso: febrero-2003
Ubicación: chile
Mensajes: 101
Antigüedad: 21 años, 2 meses
Puntos: 1
Respuesta: Herencia, HTML table Label

dwaks, muchas gracias por tu explicacion, tal como me explicas lo tenia en mi proyecto, lo de las herencias, solo me faltaba enlazar el control del ASPX con la propiedad de la clase base, te agradezco mucho tu explicación y tiempo, voy a probar y te cuento como me va.....

Saludos
__________________
s[K]eL
  #6 (permalink)  
Antiguo 15/07/2009, 10:48
 
Fecha de Ingreso: febrero-2003
Ubicación: chile
Mensajes: 101
Antigüedad: 21 años, 2 meses
Puntos: 1
De acuerdo Respuesta: Herencia, HTML table Label

Dwaks

Te cuento probe y funciono perfectamnte, muchas gracias por tu ayuda
__________________
s[K]eL
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:43.