DynamicPopulate

25 junio 2008

Descripción


Se trata de otro sencillo extendedor. Su funcionalidad consiste en permitir que en base a un evento (por ejemplo el click de un botón) se lea el resultado de un WebService o un método de la propia página, y éste se escriba en un control, por ejemplo un Label... obviamente sin recargar la página.


El valor que debe devolver el servicio Web o el método de la página debe ser un string en formato HTML.

Propiedades


• TargetControlID:
el ID del control sobre el que se escribirá el resultado. Típicamente es un Label o un TextBox.

• ClearContentsDuringUpdate: propiedad opcional (por defecto vale true) en la que indicamos si durante la llamada al WebService o método de página el valor del control debe borrarse.
• ServicePath: Url del servicio web al que haremos la llamada. Si lo que estamos es llamando a un método de página, nos pondremos nada.
• ServiceMethod: nombre del método al que estamos llamando. Su firma debe ser de este tipo:
[WebMethod]
public string DynamicPopulateMethod(string contextKey){...}
• PopulateTriggerControlID: control desde el que haremos clic para comenzar el proceso. Típicamente es un Button o un LinkButton.
• UpdatingCssClass: cuando se ha iniciado la llamada, podemos querer demostrar al usuario que hemos iniciado el proceso. Con esta propiedad asignaremos la clase CSS que aplicaremos al control.
• CustomScript: en lugar de llamar a un método de página o WebService, podemos llamar a un método de javascript.
• ContextKey: se trata del string que se le pasará al método como parámetro, de modo que podamos tratarlo en éste y dar una respuesta personalizada.

mas información aqui

DropShadow

Descripción


El DropShadow extiende al control Panel con dos características muy interesantes:

- Añade una sombra, permitiéndonos definir tanto su profundidad como su oscuridad.
- Crea un efecto de redondeado del Panel.

Por consiguiente, conseguimos dos efectos muy profesionales de forma tremendamente sencilla.

Propiedades


• TargetControlID:
ID del Panel sobre el que aplicaremos los efectos.

• Width: profundidad en pixels de la sombra. Es un parámetro opcional que por defecto vale 5.
• Opacity: valor decimal en tre 0 y 1 que define la opacidad de la sombra, donde el 0 corresponde a transparencia total y 1.0 a completamente opaco. También es opcional y su valor por defecto es 0.5.
• TrackPosition: lo pondremos a true si nuestro panel lo hemos definido con posición absoluta o si va a poder ser movido. En caso contrario pondremos false (o no ponemos nada).
• Rounded: Si queremos un efecto de redondeado lo pondremos a true, sino, vale con ponerlo a false.

mas informacion aqui

DropDown

Descripción

Un sencillo control que le da un aspecto muy avanzado y profesional a nuestra página, así como resultar se muy útil. Consiste en hacer aparentar un DropDown donde no lo hay. Por ejemplo, imaginemos que tenemos dos paneles y que al hacer click sobre uno queremos que aparezca el segundo panel del mismo modo que aparece el contenido de una lista desplegable (en la imagen lo veremos mejor.

Propiedades


• TargetControlID: ID del control sobre el que aplicaremos los efectos. Normalmente será un Panel, pero puede ser cualquier cosa.
• DropDownControlID: El Id del Panel que será mostrado como una lista desplegable.

mas informacion aqui

DragPanel

Descripción

El DragPanel sería el ejemplo perfecto de cómo conseguir una funcionalidad avanzada, que en javascript requeriría decenas de líneas de programación, con apenas dos líneas de código y una mayor flexibilidad.

Se aplica a cualquier control Web (el más habitual es el Panel) y le añade la funcionalidad de poder arrastrarlo a cualquier parte de la pantalla. Vamos a distinguir entre el controlador y el contenido, donde el controlador es sobre lo que deberemos hacer clic y arrastrar para mover el contenido.

Propiedades

• TargetControlID: el ID del control correspondiente al contenido.
• DragHandleID: el ID del control correspondiente al controlador.

mas información aqui

ConfirmButton

24 junio 2008

Descripción

Con el ConfirmButton conseguimos una sencilla funcionalidad. Lo asignaremos a un Button, LinkButton o Hyperlink, de modo que cuando se haga clic sobre éste, el navegador nos muestre una ventana de confirmación. En ésta deberemos elegir “sí” o “no” para que se ejecute o no el evento asociado al control en cuestión.

Propiedades


• TargetControlID: ID del control al que aplicaremos el efecto el ConfirmButton.
• ConfirmText: texto que se mostrará al presionar sobre el control. Por ejemplo “¿Realmente desea ejecutar…?”

mas informacion aqui

CollapsiblePanel

Descripción

Con el CollapsiblePanel conseguiremos que cualquier control ASP.NET pueda ser maximizado o minimizado a nuestro antojo. Distinguiremos entre el contenido, que será el control que vaya a cerrarse y abrirse (por ejemplo un Panel) y el controlador, que será el control sobre el que deberemos hacer clic para cerrar y/o abrir el contenido.

El estado del contenido (abierto o cerrado) es guardado a lo largo de los postbacks, por lo que permanecerá igual cuando recarguemos una página. Además, podemos especificar si queremos que el contenido tenga una altura y/o anchura determinadas, o por el contrario permitimos que se dimensione como requiera.

Propiedades


• TargetControlID:
el ID del control Web correspondiente al contenido.

• CollapsedSize: el tamaño en pixels del contenido cuando está cerrado. Lo habitual es ponerlo a 0, de modo que queda totalmente cerrado.
• ExpandedSize: el tamaño en pixels del contenido cuando esté abierto.
• Collapsed: especifica el estado del contenido cuando se inicializa la página. Puede ser collapsed (cerrado) o expanded (abierto).
• Scroll Contents: si especificamos true, se añadirá una barra de scroll cuando el tamaño sobrepaso al especificado en CollapsedSize y ExpandedSize. Si no queremos que se produzca ningún efecto, lo pondremos a false.
• ExpandControlID/CollapseControlID: el ID del control Web correspondiendo al controlador. Como vemos podemos elegir un controlador que maximice el contenido y otro que lo minimice. Habitualmente ambos atributos apuntan al mismo controlador.
• TextLabelID: el ID de la Label donde se especificará el estado en que se encuentra el contenido (ver las dos próximas propiedades).
• CollapsedText: texto que se mostrará en la Label especificada en TextLabelId cuando el controlador esté cerrado.
• ExpandedText: texto que se mostrará en la Label especificada en TextLabelId cuando el controlador esté abierto.
• ImageControlID: En lugar de un texto, podemos especificar una imagen para que sea ésta la que describa el estado en que se encuentra el contenido. Si además también hemos especificado un texto, éste se corresponderá con el texto alternativo de la imagen (el atributo “alt”).
• CollapsedImage: Path que apunta a la imagen que se mostrará cuando el contenido esté minimizado.
• ExpandedImage: Path que apunta a la imagen que se mostrará cuando el contenido esté maximizado.
• ExpandDirection: podemos definir que el contenido se abra de arriba a abajo o de izquierda a derecha. En el primer caso asignaremos “Vertical” y en el segundo “Horizontal”.

Mas Información aqui.

CascadingDropDown

23 junio 2008

Descripción

Imaginemos un escenario en que tenemos 3 listas desplegables. La primera de ellas tiene unos items determinados, pero la segunda lista depende del valor que se le dé a la primera y la tercera lista del valor que se le dé a la segunda.

Hasta ahora teníamos dos opciones:
- Implementar una compleja serie de funciones javascript,
- Utilizar ASP.NET recargando las páginas.

En el primer caso quedaba muy profesional de cara al cliente, pues éste manejaba muchos datos de forma muy rápida y sin recargar la página... sin embargo era muy poco profesional del cara al programador pues la complejidad en el javascript se incrementaba exponencialmente.

En el segundo caso el programador conseguía una programa estable, rápido y fácilmente modificable, pero el usuario veía cómo se recargaba la página entera cada vez que elegía una opción diferente.

Pues bien, con el CascadingDropDown solucionamos los problemas y nos quedamos con las ventajas: no se recargará la página y se definirá el contenido de los DropDownList mediante ASP.NET.

Propiedades

• TargetControlID: el ID de la lista desplegable a la que se aplicará.
• Category: se define como el nombre de la categoría que la lista desplegable representa. Su utilidad será la de representar uno de los dos parámetros de entrada al ServiceMethod que estudiaremos posteriormente
• PromptText: es un texto opcional que verá el usuario cuando la lista desplegable esté vacía.
• LoadingText: también es un texto opcional que verá el usuario cuando el dato se está cargando.
• ServicePath: define el path del servicio web que devuelve la información que se usará para rellenar la lista desplegable. Si el servicio web se encuentra en la propia página en que estamos trabajando, no pondremos nada en esta propiedad.
• ServiceMethod: le dedicamos un apartado exclusivo
• ParentControlID: ID de la lista desplegable de cuya selección depende esta lista desplegable. En nuestro ejemplo, si esta es la lista desplegable 2, el ParentControlID apuntaría a la lista desplegable 2. Gracias a ParentControlId creamos una jerarquía de listas desplegables. En caso de estar en lo más alto de la jerarquía no pondríamos nada.
• SelectedValue: valor que vendría seleccionado por defecto. Es opcional. ServiceMethodEl es la función a la que se llamará para rellenar la lista desplegable. Tendrá el siguiente aspecto:

[WebMethod]
public CascadingDropDownNameValue[] GetDropDownContents(string knownCategoryValues, string category){...}

...donde lo único que se podrá cambiar será el nombre de la función, pues el resto debe ser igual.

Observamos que:
• La función debe ir precedida por [WebMethod].
• CascadingDropDownNameValue es un tipo de dato dentro del namespace AjaxControlToolkit (que en nuestro ejemplo suponemos ya importado mediante using (C#) o import (VB)).
• El segundo parámetro (category) se corresponde con el atributo Category que hemos indicado en nuestro control CascadingDropDown.

Mención especial merece el primer parámetro. En éste se almacena el valor seleccionado de cada una de las listas desplegables predecesoras en la jerarquía. Siguiendo con nuestro ejemplo, si estuviéramos dentro del definido en la lista desplegable 3, el contenido del primer parámetro sería similar a:

Category1:valor1;category2:valor2

Pero no cabe asustarse, no hace falta que parseemos a mano esa información, pues dispondemos del método ParseKnownCategoryValuesString que hará ese trabajo por nosotros, de modo que haciendo:

StringDictionary knownCategoryValuesDictionary = AjaxControlToolkit .CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);

... obtenemos un StringDictionary bien ordenado y sencillo de utilizar.

Mas Información aqui

Animation

Descripción

El Animation es un extendedor que permite aplicar sobre el elemento elegido las animaciones que nos permiten el Animation Framework. El Animation Framework es una aquitecturo de animaciones creadas para ASP.NET AJAX y que, a pesar de no ser demasiado complicadas, merecerían un artículo completo para su correcta explicación.

A modo de tanteo, diremos que las animaciones proporcionadas por el Animation Framework y que podremos aplicar con nuestro extendedor Animation, nos permiten asignar efecto de “fadeIn” y “fadeOut”, “pulse”, “Scale” o acciones javascript, tanto en modo secuencia, en modo paralelo o cualquier combinación imaginable de las dos.

Propiedades


• TargetControlID:
ID del control a partir del cual y sobre el cual vamos a aplicar las animaciones.

• OnLoad: elemento bajo el cual añadiremos las animaciones que se iniciarán tras la carga del control.
• OnClick: elemento bajo el cual añadiremos las animaciones que se iniciarán hacer click sobre el control.
• OnMouseOver: elemento bajo el cual añadiremos las animaciones que se iniciarán tras pasar el mouse sobre el control.
• OnMouseOut: elemento bajo el cual añadiremos las animaciones que se iniciarán tras sacar el mouse de encima del control.
• OnHoverOver: Similar a OnMouseOver, solo que parará la animación OnHoverOut antes de ejecutarse.
• OnHoverOut: Similar a OnMouseOut, solo que parará la animación OnHoverOver antes de ejecutarse.

Más Información Aqui

AlwaysVisibleControl

Descripción

El AlwaysVisibleControl es uno de los controles Web del ASP.NET AJAX Control Toolkit más simples. Su funcionalidad consiste en dejar clavado el contenido en un punto específico de la página. Un ejemplo sería el que cierto mensaje se muestre siempre en la parte inferior derecha de nuestra página, y que se mantenga en la misma posición de la pantalla del usuario cuando se haga scroll sobre la página.

Propiedades

• TargetControlID: ID del control que queremos que el AlwaysVisibleControl clave en la posición que determinemos. Habitualmente suele tratarse de un “Panel”.
• HorizontalSide: ubicación horizontal (derecha o izquierda) donde se clavará el control. Es una propiedad optativa que por defecto vale left. HorizontalOffset: distancia horizontal en pixels desde el objeto hasta el lado que definamos en el HorizontalSide. Es optativo y por defecto vale 0 px.
• VerticalSide: ubicación vertical (arriba o abajo) donde se clavará el control. Es una propiedad optativa que por defecto vale top.
• VerticalOffset: distancia vertical en pixels desde el objeto hasta el lado que definamos en el VerticalSide. Es optativo y por defecto vale 0 px.
• ScrollEffectDuration: define la cantidad de segundos entre que la página hace scroll hasta que el control se posiciona donde definamos. Por defecto vale 0.1 segundos y siempre debe ser mayor que cero.

Más Información aqui

Accordion

21 junio 2008

Descripción

El control Web Accordion te permite ubicar múltiples paneles, de modo que únicamente uno será visible en cada momento. Dichos paneles son los AccordionPane, de los que debemos definir la cabecera (Header) y el contenido (Content). El estado del Accordion es guardado, de modo que el AccordionPane activo se mantendrá visible a través de los postbacks.

Propiedades

9 propiedades definen al Accordion:
• SelectedIndex: Define el AccordionPane que estará activo por defecto, donde el primero tiene como índice 0. Es opcional y por defecto vale 0.
• HeaderCssClass / ContentCssClass: Identifica el nombre de la clase CSS utilizada para las cabeceras/contenidos (Header/content). Si se define como atributo del Accordion, la clase se aplicará por defecto a todos los AccordionPane de que esté compuesto. También se puede definir individualmente como atributo de cada AccordionPane.
• FadeTransitions: en caso de ser true se aplicacará un efecto de fading en la transición, en caso de ser false la transición se realizará de modo normal. Es optativo y por defecto vale false.
• TransitionDuration: cantidad de milisegundos que definen la duración de una transición. Se consigue un efecto muy agradeble con transición de unos 200-300 milisegundos.
• FramesPerSecond: número de frames por segundo que se usará en la animación de las transiciones. Suele ser suficiente un número superior a 40.
• AutoSize: define la restricción en la altura del Accordion. Puede tomar tres valores:
o None: No tiene ninguna restricción. La altura del Accordion no tiene límite. Es importante reseñar que esto puede implicar que otros elementos de la misma Web sean movidos.
o Limit: como máximo, el Accordion medirá lo que marque la propiedad Height. Si el Accordion es más alto de lo que marque su Height, al AccordionPane activo se le añadirá un scroll para ajustarse al límite. En caso de ser menor a ese límite el Accordion no sufre cambios.
o Fill: el Accordion siempre medirá lo que marqué su propiedad Height, expandiendo o minimizando el contenido en base a las necesidades.
• Header: es una propiedad del AccordionPane y define el valor de su cabecera.
• Content: es una propiedad del AccordionPane y define el valor de su contenido.
• DataSource: El DataSource a aplicar (totalmente optativo). Para una correcta aplicación hay que llamar a DataBind().
• DataSourceID: – Alternativamente, poder asignar el identificador de nuestra fuente de datos.
• DataMember: el miembro a enlazar cuando se usa el DataSourceID.

Sin embargo, lo que no se hará automáticamente, y debemos hacerlo nosotros siempre, es incluir una referencia al ScriptManager, lo que no requiere más que otro sencillo arrastre desde nuestra caja de herramientas.

Además, y como es obvio, deberán definirse las clases CSS tanto de la cabecera como del contenido.

ejemplo en un Ciclo.

private void CargaNews()
{
cls_New ne = new cls_New();
DataSet ds2 = ne.home();

foreach (DataRow dr2 in ds2.Tables[0].Rows)
{
Label lblHeader = new Label(); //Titulo
Label lblContent = new Label(); //Contenido

lblHeader.Text = dr2["N_TITULO"].ToString();
lblContent.Text = dr2["N_BAJADA"].ToString();

//crea obeto tipo panel
AjaxControlToolkit.AccordionPane acpPanel = new AjaxControlToolkit.AccordionPane();
acpPanel.HeaderContainer.Controls.Add(lblHeader); //Agrega Titulo
acpPanel.ContentContainer.Controls.Add(lblContent); //Agrega Contenido

Accordion.Panes.Add(acpPanel); //Crea Panel de Accordion
}
ds2.Dispose();
}

Mas Información aqui

Tutorial Blend & Silvelight

Introducción a Silverlight

El desarrollo de aplicaciones Web siempre se ha divido en dos partes bien diferenciadas, por un lado se encuentra el desarrollado de la aplicación en sí, con toda la lógica necesaria para su correcto funcionamiento y navegación al igual que con la lógica necesaria para manipular, interpretar y validar los datos que queremos presentar; por otro lado se encuentra el esfuerzo necesario para que dicha aplicación presente al usuario final una interfaz usable y atractiva aplicando guías de estilo sin hacer menoscabo en un diseño atractivo e impactante.

Silverlight se presenta como una solución a estas dos tareas, integrándose con las tecnologías de desarrollo Web existentes y permitiéndonos crear Aplicaciones Interactivas Ricas (RIA) enfatizando las tareas de diseño e integración de elementos multimedia, así como incorporando animaciones.

Silverlight unifica las capacidades del servidor, la Web y el Escritorio, así como el código manejado y los lenguajes dinámicos, con programación declarativa y tradicional, y además, la potencia de Windows Presentation Foundation (WPF). Por lo tanto Silverlight nos proporciona un modo de crear aplicaciones Web a través de herramientas que nos son familiares y de tecnologías basadas en .Net Framework.

Esta tecnología nos proporciona las siguientes características:

  • Soporte muti-navegador y multi-plataforma. Se ejecuta sobre los exploradores Web más extendidos, como puede ser Internet Explorer, Mozilla Firefox y Apple Safari, en Microsoft Windows y Apple Mac OS X.

  • La experiencia obtenida es igual con independencia de dónde se ejecute.

  • Se distribuye a modo de una pequeña descarga que se instala en segundos.

  • Soporta Streaming de audio y video, escalando la calidad del video para ser visualizado desde dispositivos móviles hasta en un escritorio llegando a una calidad de 720p Full HD.

  • Permite la manipulación de elementos gráficos, como puede ser el Zoom, o la función de arrastra y soltar.

  • Es capaz de actualizar los datos sin necesidad de obligar al usuario a actualizar la página.


Fantástico tutorial de Silverlight y Expresión Blend con una gran presentación grafica, ya que este se encuentra realizado en Silverlight. En este manual podremos encontrar próximamente una sección de WPF.

http://www.nibblestutorials.net/

el numeros de la bestias y descuentos

Que bonita esa cancion de los Maiden... 666, el numero de la bestia. Sin embargo, programanticamente hablando, el 666 es un numero de lo mas normalito (si lo ponemos como 0x29A, 0o1232 o 0b1010011010 no impone el mismo respeto, verdad?)

Pero en programacion si que hay numeros "especiales" que son a la vez enormemente interesantes para los curiosos y terribles para los descuidados. En este articulo vamos a ver un par de puzzlers que espero que nos hagan pensar un par de veces la proxima vez que tengamos que evaluar estos "casos extremos" y de paso nos ayuden a repasar un poquito mas de aritmetica programante.

El primero, hablando de casos extremos, es para examinar unos conceptos basicos sobre matematica. Si tenemos este trocito de codigo que declara distintos valores y operaciones:

float zero = 0.0f;
float one = 1.0f;
float negativeone = -1.0f;

float division1 = zero / one;
float division2 = zero / negativeone;

float infinity1 = one / zero;
float infinity2 = negativeone / zero;

float division0 = zero / zero;

Console.WriteLine(division1 == division2);
Console.WriteLine(infinity1 == infinity2);

Console.WriteLine(infinity1 == infinity1);
Console.WriteLine(infinity2 == infinity2);
Console.WriteLine(division0 == division0);

¿Sabríais decir cuál será la salida que obtendremos al ejecutar?

Y el segundo es un caso de "depuracion pensando" que tiene que ver con numeros especiales tambien. Supongamos que tenemos una serie de productos a los que queremos aplicar un descuento (porque para eso estamos de rebajas de Enero). Tenemos algunos cuyo precio se ha reducido a la mitad, y otros que rebajamos un 10%. Como no nos gusta andar con la calculadora todo el rato nos hemos hecho un programita que aplica los descuentos por nosotros. El trocito de codigo que hace lo que queremos es algo como:

int[] precios = {20, 30, 20};
float[] descuentos = {0.5f, 0.5f, 0.1f};

for(int i = 0; i < style="font-weight: normal; color: blue;" color="#0000e0" face="Courier New" size="11"> int
precioRebajado = (int) (precios[ i ] * (1 - descuentos[ i ]));
int porcentaje = (int) (100 * descuentos[ i ]);
Console.WriteLine("antes: {0} euros... ahora solo {1}!!! (-{2}%)",
precios[ i ], precioRebajado, porcentaje);
}

Sin embargo, al ejecutar nos hemos dado cuenta que la salida no es justo la que esperabamos. ¿Sabríais decir cuál es el error o errores que hemos cometido? ¿Como podemos hacer que nuestro programa funcione correctamente?

NOTAS/Actualizacion: Un par de apuntes sobre el problema de parte de un par de lectores avanzados (ver comentarios) }:)

  • Tal y como menciona Augusto, estos problemas pueden arreglarse usando la clase System.Decimal (o java.math.BigDecimal o el equivalente en cada plataforma). El tipo Decimal es bastante interesante, asi que dejamos aqui la referencia por si alguien es curioso y quiere adivinar por que sirve para este tipo de problemas (y cuales son sus ventajas e inconvenientes)
  • Curiosea que te curiosea, Tio_Luiso nos indica que en el primer trocito de codigo, C# parece que no representa el resultado de 0/-1 como "menos cero" (de acuerdo al estandar IEEE 754). En cuanto pueda informarme sobre esto pongo una actualizacion! }:)
Muchisimas gracias a los dos por tomaros el tiempo de compartir esta informacion! }:D