¿Por qué aguardas con impaciencia las cosas? Si son inútiles para tu vida, inútil es también aguardarlas. Si son necesarias, ellas vendrán y vendrán a tiempo. Amado Nervo
martes, 8 de diciembre de 2009
Ajax .Net: Usar Fade Animation en Javascript
Excelente ejemplo básico para usar Ajax .Net animation en javascript.
jueves, 3 de diciembre de 2009
Función Days360 en Vb.Net y C#
Código C#:
public static int CalculateDays360(DateTime d1, DateTime d2)
{
int years = d2.Year - d1.Year;
int months = d2.Month - d1.Month;
int dayNo1 = 0;
int dayNo2 = 0;
dayNo2 = d2.Day;
dayNo1 = d1.Day;
if (dayNo1 == 31) dayNo1 = 30;
if (dayNo2 == 31) dayNo2 = 30;
int days = dayNo2 - dayNo1;
return years * 360 + months * 30 + days;
}
Código VB.Net:
Public Shared Function CalculateDays360(ByVal d1 As DateTime, ByVal d2 As DateTime) As Integer
Dim years As Integer = d2.Year - d1.Year
Dim months As Integer = d2.Month - d1.Month
Dim dayNo1 As Integer = 0
Dim dayNo2 As Integer = 0
dayNo2 = d2.Day
dayNo1 = d1.Day
If (dayNo1 = 31) Then dayNo1 = 30
If (dayNo2 = 31) Then dayNo2 = 30
Dim days As Integer = dayNo2 - dayNo1
Return years * 360 + months * 30 + days
End Function
public static int CalculateDays360(DateTime d1, DateTime d2)
{
int years = d2.Year - d1.Year;
int months = d2.Month - d1.Month;
int dayNo1 = 0;
int dayNo2 = 0;
dayNo2 = d2.Day;
dayNo1 = d1.Day;
if (dayNo1 == 31) dayNo1 = 30;
if (dayNo2 == 31) dayNo2 = 30;
int days = dayNo2 - dayNo1;
return years * 360 + months * 30 + days;
}
Código VB.Net:
Public Shared Function CalculateDays360(ByVal d1 As DateTime, ByVal d2 As DateTime) As Integer
Dim years As Integer = d2.Year - d1.Year
Dim months As Integer = d2.Month - d1.Month
Dim dayNo1 As Integer = 0
Dim dayNo2 As Integer = 0
dayNo2 = d2.Day
dayNo1 = d1.Day
If (dayNo1 = 31) Then dayNo1 = 30
If (dayNo2 = 31) Then dayNo2 = 30
Dim days As Integer = dayNo2 - dayNo1
Return years * 360 + months * 30 + days
End Function
domingo, 29 de noviembre de 2009
ASP.NET: Supuestamente el control no existe!
Un caso extraño, que me tomo como una hora en resolverlo, para variar!
El problema consistía en que tenía una tabla con un ID cualquiera. En el momento de hacer referencia a ese control en el CodeBehind y después ejecutar el sitio en modo de depuración, aparecía un error indicando que la tabla no estaba declara. Sin embargo si estaba declarada ya que inclusive pude hacer referencia a la tabla desde CodeBehind.
¿Pero que provocaba ese problema?
El problema era provocado por una copia que había hecho de los mismo archivos (el archivo *.aspx y el archivo *.vb). Parece que VS 2008, supongo que en los anteriores sucede también, detecta que el control ya está declarado pero es para la página de la copia que tenía y supongo yo, que el control Table que tenía en la página original estaba siendo anulado de alguna forma; en fin, para solucionar el asunto fue simplemente borrando los archivos de las copias que tenía en el mismo lugar que los archivos originales.
El problema consistía en que tenía una tabla con un ID cualquiera. En el momento de hacer referencia a ese control en el CodeBehind y después ejecutar el sitio en modo de depuración, aparecía un error indicando que la tabla no estaba declara. Sin embargo si estaba declarada ya que inclusive pude hacer referencia a la tabla desde CodeBehind.
¿Pero que provocaba ese problema?
El problema era provocado por una copia que había hecho de los mismo archivos (el archivo *.aspx y el archivo *.vb). Parece que VS 2008, supongo que en los anteriores sucede también, detecta que el control ya está declarado pero es para la página de la copia que tenía y supongo yo, que el control Table que tenía en la página original estaba siendo anulado de alguna forma; en fin, para solucionar el asunto fue simplemente borrando los archivos de las copias que tenía en el mismo lugar que los archivos originales.
domingo, 15 de noviembre de 2009
CSS: Mapa de Regiones con CSS
Necesitaba un ejemplo bien claro para crear mapas con CSS o por lo menos saber si se puede lograr el mismo efecto que se hace con el elemento <map> de html. Una fuente de ayuda la encontré en www.freshivore.net
domingo, 1 de noviembre de 2009
Asp.Net: Persistir el ViewState
El siguiente código hace que le viewstate se guarde en una variable de sessión en vez del lado del cliente.
Código para visual Basic:
Dim _pers As PageStatePersister
Protected Overrides ReadOnly Property PageStatePersister() As PageStatePersister
Get
If _pers Is Nothing Then
_pers = New SessionPageStatePersister(Me)
End If
Return _pers
End Get
End Property
Código C#:
PageStatePersister _pers;
protected override PageStatePersister PageStatePersister
{
get
{
if (_pers == null)
{
_pers = new SessionPageStatePersister(this);
}
return _pers;
}
}
Referencia en www.telerik.com
Mas ayuda en http://geeks.ms
Código para visual Basic:
Dim _pers As PageStatePersister
Protected Overrides ReadOnly Property PageStatePersister() As PageStatePersister
Get
If _pers Is Nothing Then
_pers = New SessionPageStatePersister(Me)
End If
Return _pers
End Get
End Property
Código C#:
PageStatePersister _pers;
protected override PageStatePersister PageStatePersister
{
get
{
if (_pers == null)
{
_pers = new SessionPageStatePersister(this);
}
return _pers;
}
}
Referencia en www.telerik.com
Mas ayuda en http://geeks.ms
miércoles, 28 de octubre de 2009
¿Cuántos días, meses y años hay entre dos fechas?
Estuve intentando horas de horas con el problema de cómo hacer para obtener la cantidad de días, meses y años, sin importar el lenguaje de programación. Pues el algoritmo al final es simple y lo voy a explicar brevemente.
Supongamos que recibimos dos fechas donde fecha de inicio es 1/1/2004 y fecha final es 30/11/2005. El objetivo final es obtener la cantidad de años, meses y días, pero que sea exacto y esto quiere decir que hay que tomar en cuenta que no todos los meses son de 30 días y que no todos los años tienen 365 debido al año bisiesto.
La solución yo la resolví en VB .Net con la función DateAdd Lo primero es calcular los años. Para eso calculamos la cantida de días totales y la dividimos entre 360 y extraemos la parte absoluta con Math.Abs.
Viene lo más complicadillo y es calcular los meses y los días. Para ambos casos, el truco está siempre es hacerle una suma a la fecha de inicio para irnos acercando a la fecha final. Entonces para calcular los meses hay que sumar a la fecha de inicio la cantidad de años que ya teníamos calculado. Del resultado que obtengo saco los meses y se lo resto a los meses de la fecha final.
Ejemplo VB .Net:
totalMeses = Math.Abs(final.Month - DateAdd(DateInterval.Year, _anios, inicio).Month)
Para calcular los días, la lógica es la misma. Lo que hay que hacer es sumar todos los meses a la fecha de inicio. Esto quiere decir que la cantidad de años que tengo calculado, lo convierto en meses y lo sumo con la cantidad de meses que obtuve en totalMeses. De esa suma, el resultado se lo sumo a la fecha de inicio original. Como le estoy sumando todos los meses a la fecha de inicio, nos va a quedar una fecha que se acerca más a la fecha final.
Finalmente, entonces se deduce que hay que sacar la diferencia en días de la fecha final con la fecha que obtuve en el último paso.
Y bueno, dej esta entrada para recordarme a mí mismo como fue que resolví el algoritmo, jaja!
Para poder saber si los resultados andan bien, se puede usar el siguiente sitio en el cual tiene una pequeña aplicación que hace esos cálculos: www.timeanddate.com
Supongamos que recibimos dos fechas donde fecha de inicio es 1/1/2004 y fecha final es 30/11/2005. El objetivo final es obtener la cantidad de años, meses y días, pero que sea exacto y esto quiere decir que hay que tomar en cuenta que no todos los meses son de 30 días y que no todos los años tienen 365 debido al año bisiesto.
La solución yo la resolví en VB .Net con la función DateAdd Lo primero es calcular los años. Para eso calculamos la cantida de días totales y la dividimos entre 360 y extraemos la parte absoluta con Math.Abs.
Viene lo más complicadillo y es calcular los meses y los días. Para ambos casos, el truco está siempre es hacerle una suma a la fecha de inicio para irnos acercando a la fecha final. Entonces para calcular los meses hay que sumar a la fecha de inicio la cantidad de años que ya teníamos calculado. Del resultado que obtengo saco los meses y se lo resto a los meses de la fecha final.
Ejemplo VB .Net:
totalMeses = Math.Abs(final.Month - DateAdd(DateInterval.Year, _anios, inicio).Month)
Para calcular los días, la lógica es la misma. Lo que hay que hacer es sumar todos los meses a la fecha de inicio. Esto quiere decir que la cantidad de años que tengo calculado, lo convierto en meses y lo sumo con la cantidad de meses que obtuve en totalMeses. De esa suma, el resultado se lo sumo a la fecha de inicio original. Como le estoy sumando todos los meses a la fecha de inicio, nos va a quedar una fecha que se acerca más a la fecha final.
Finalmente, entonces se deduce que hay que sacar la diferencia en días de la fecha final con la fecha que obtuve en el último paso.
Y bueno, dej esta entrada para recordarme a mí mismo como fue que resolví el algoritmo, jaja!
Para poder saber si los resultados andan bien, se puede usar el siguiente sitio en el cual tiene una pequeña aplicación que hace esos cálculos: www.timeanddate.com
martes, 20 de octubre de 2009
Asp.Net: Validator Controls
En ocasiones, el uso de los controles de validación se pueden volver un dolor de cabeza. Solo para mencionar una de las soluciones por la cual no se activan los validadores o el por qué por ejemplo el control CalendarExtender se comporta indevidamente mal, eso puede ser porque se está usando la propiedad SetFocusOnError. Con solo quitarla todo se puede solucionar.
jueves, 15 de octubre de 2009
PNG: Transparencias de PNG en IE6
Encontré un código perfecto para permitir transparencias en IE6. Es el primer código que veo que sí funcionan. El código que se puede guardar en un archivo *.js es el siguiente:
El enlace donde encontré éste código es: www.webmasterlibre.com
var arVersion = navigator.appVersion.split("MSIE")
var version = parseFloat(arVersion[1])
if ((version >= 5.5) && (document.body.filters))
{
for(var i=0; i<document.images.length; i++)
{
var img = document.images[i]
var imgName = img.src.toUpperCase()
if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
{
var imgID = (img.id) ? "id='" + img.id + "' " : ""
var imgClass = (img.className) ? "class='" + img.className + "' " : ""
var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
var imgStyle = "display:inline-block;" + img.style.cssText
if (img.align == "left") imgStyle = "float:left;" + imgStyle
if (img.align == "right") imgStyle = "float:right;" + imgStyle
if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
var strNewHTML = "<span " + imgID + imgClass + imgTitle
+ " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
+ "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"
img.outerHTML = strNewHTML
i = i-1
}
}
}
var version = parseFloat(arVersion[1])
if ((version >= 5.5) && (document.body.filters))
{
for(var i=0; i<document.images.length; i++)
{
var img = document.images[i]
var imgName = img.src.toUpperCase()
if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
{
var imgID = (img.id) ? "id='" + img.id + "' " : ""
var imgClass = (img.className) ? "class='" + img.className + "' " : ""
var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
var imgStyle = "display:inline-block;" + img.style.cssText
if (img.align == "left") imgStyle = "float:left;" + imgStyle
if (img.align == "right") imgStyle = "float:right;" + imgStyle
if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
var strNewHTML = "<span " + imgID + imgClass + imgTitle
+ " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
+ "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"
img.outerHTML = strNewHTML
i = i-1
}
}
}
El enlace donde encontré éste código es: www.webmasterlibre.com
domingo, 11 de octubre de 2009
Asp.Net: Control CustomValidator.
Necesitaba saber cómo implementar una función de validación del lado del cliente para el control Custom Validator; la respuesta la encontré en Mundo Programación
sábado, 3 de octubre de 2009
Ajax .Net: ¿Por qué desaparece el ModalPopup al escoger un item en el DropDownList?
Cada vez que ocurre un PostBack o un AutoPostBack dentro de un ModalPopupExtender, éste se cierra. La solución más rápida es poner éste código en el Head para poder mantener el estado del ModalPopupExtender.
Nota: El control ModalPopupExtender debe tener El atributo BehaviorID con un valor cualquiera. Dicho valor se puede usar en el código JS para poder hacer referencia al mismo de una forma más rápida.
<script type="text/javascript">
var _estadoModal;
function pageLoad() {
$addHandler($get("btnSalir"), "click", OnSalir_Click);
var mpe = $find("mpe");
mpe.add_shown(OnShowModal);
if (_estadoModal)
mpe.show();
}
function OnShowModal(sender) {
_estadoModal = true;
}
function OnSalir_Click(sender) {
_estadoModal = false;
}
</script>
Descargar ejemplo
Nota: El control ModalPopupExtender debe tener El atributo BehaviorID con un valor cualquiera. Dicho valor se puede usar en el código JS para poder hacer referencia al mismo de una forma más rápida.
<script type="text/javascript">
var _estadoModal;
function pageLoad() {
$addHandler($get("btnSalir"), "click", OnSalir_Click);
var mpe = $find("mpe");
mpe.add_shown(OnShowModal);
if (_estadoModal)
mpe.show();
}
function OnShowModal(sender) {
_estadoModal = true;
}
function OnSalir_Click(sender) {
_estadoModal = false;
}
</script>
Si en la variable "_estadoModal" está el valor true, entonces
se vuelve a ordenar que el ModalPopup se muestre. Esto hace
que le caiga encima a la instancia anterior que en realidad
ya esta muerta; lo que pasa es que el updatePanel no se a
refrescado y por eso parece que el ModalPopup nunca desapareció
de la pantalla, el efecto es rápido y parece que el Modalpopup
no se cierra.
Si en la variable "_estadoModal" está el valor "false",
entonces el ModalPopup desaparece ya que el Postback hace que
se cierre el ModalPopup y por ende el UpdatePanel se refresca
borrando la imagen del ModalPopup que se estaba mostrando.
NOTA: CUALQUIER OBJETO QUE HAGA UN POSTBACK O UN
AUTOPOSTBACK PROVOCAN QUE EL MODALPOPUPEXTENDER
SE CIERRE DE INMEDIATO. SIENDO MÁS ESPECÍFICOS,
EL MODALPOPUPEXTENDER SE CIERRA PORQUE ESTE
CONTROL NO MANTIENE SU ESTADO EN EL LADO DEL
CLIENTE DESPUÉS DE CADA POSTBACK O AUTOPOSTBACK.
se vuelve a ordenar que el ModalPopup se muestre. Esto hace
que le caiga encima a la instancia anterior que en realidad
ya esta muerta; lo que pasa es que el updatePanel no se a
refrescado y por eso parece que el ModalPopup nunca desapareció
de la pantalla, el efecto es rápido y parece que el Modalpopup
no se cierra.
Si en la variable "_estadoModal" está el valor "false",
entonces el ModalPopup desaparece ya que el Postback hace que
se cierre el ModalPopup y por ende el UpdatePanel se refresca
borrando la imagen del ModalPopup que se estaba mostrando.
NOTA: CUALQUIER OBJETO QUE HAGA UN POSTBACK O UN
AUTOPOSTBACK PROVOCAN QUE EL MODALPOPUPEXTENDER
SE CIERRE DE INMEDIATO. SIENDO MÁS ESPECÍFICOS,
EL MODALPOPUPEXTENDER SE CIERRA PORQUE ESTE
CONTROL NO MANTIENE SU ESTADO EN EL LADO DEL
CLIENTE DESPUÉS DE CADA POSTBACK O AUTOPOSTBACK.
Descargar ejemplo
Ajax .Net: ¿Por qué el TabContainer no aparece?
Puse el TabContainer y al ejecutar el sitio resulta que no se ve el TabContainer.
Solución: El problema es porque estaba agregando el TabContainer ¡a pata!, y olvidé ponerle a cada TabPanel el atributo runat="server". ¡jeje!
Solución: El problema es porque estaba agregando el TabContainer ¡a pata!, y olvidé ponerle a cada TabPanel el atributo runat="server". ¡jeje!
viernes, 2 de octubre de 2009
Ajax.Net: Soluciones a problemas de Ajax.
En el siguiente sitio se explican varias soluciones a problemas que podemos encontrar al trabajar con Ajax.net: ver sitio
Por ejemplo, en ese sitio encontré la solución para usar saber cómo mantener el ModalPopupExtender activo después de que ocurra un postback.
Más detalles del framework en http://www.asp.net/AJAX/Documentation/Live/Overview/default.aspx. En éste sitio está todo lo que se necesita para dominar Ajax .Net.
Por ejemplo, en ese sitio encontré la solución para usar saber cómo mantener el ModalPopupExtender activo después de que ocurra un postback.
Más detalles del framework en http://www.asp.net/AJAX/Documentation/Live/Overview/default.aspx. En éste sitio está todo lo que se necesita para dominar Ajax .Net.
Suscribirse a:
Entradas (Atom)