Hace algún tiempo descubrí un interesante plugin para Visual Studio, que ampliaba las capacidades propias del IntelliSense. Hoy quiero desgranar un poquito más este plugin, y comentarios las bondades del mismo. Un pequeño granito de arena para difundir este complemento realizado por el equipo de JetBRAINS
Indudablemente detrás de este plugin, se encuentra un gran trabajo de investigación y desarrollo, que puede seguir creciendo y evolucionando gracias a todos aquellos que participan del mismo.
Para aquellos que aún no lo conozcáis, ReSharper es un plugin que otorga, al igual que el IntelliSense, ayudas visuales durante el desarrollo del código fuente. Entre sus virtudes, se pueden destacar:
· Análisis del código en tiempo real, con indicaciones de errores.
· Actualización automática del código.
· Inserción de partes de código predefinido.
· Refactorización
· Reescritura de código en formato correcto.
...
Además, en la última actualización, se ha incluido soporte a Javascript y Razor para MVC, control de código CSS y HTML, ampliación del sistema de navegación y búsqueda, ... y muchas cosas más.
Aquí puedes ver las nuevas y mejoradas funcionalidades.
REFERENCIAS:
JetBRAINS
ReSharper
[...]
Un pequeño rincón donde poder compartir mis experiencias como programador... en el día a día
Customize GridViewColumn: Personalizando columnas de gridview por código con controles
Etiquetas:
ASP.NET,
C#,
GridView,
GridViewColumn,
UserControl
Muchas veces he tenido la necesidad de incluir información concreta en una columna de un
GridView, y me ha costado mucho encontrar referencias que explicaran en
profundidad cómo realizar la “customización”
de una columna (sobre todo en castellano, porque no encontraba documentación al
respecto).
Vamos a incluir un control ImageButton, de forma que aparezca un selector multiple que actualice
todas las filas, y un Label con el nombre de la fila:
Llegados a este punto, ya tenemos configurada nuestra plantilla completa para la columna del gridView. Recordad que en este ejemplo estamos trabajando con un CheckBox, pero se podría personalizar para cualquier tipo de control e información que os hiciese falta.
En este
post, vamos a explicar paso a paso cómo se puede personalizar completamente una
columna de un GridView por código. En concreto, lo que realizaremos una personalización de
una columna con un CheckBox (que permita su edición), y una cabecera que
seleccione todas las filas del grid.
Para ello
debemos crear una plantilla para la columna
y una vez realizada, referenciarla desde la página del CodeBehind, indicándole
así al grid cómo debe mostrar la información.
Dado que
sería muy largo, lo he dividido en dos partes:
Parte I: Generación de la plantilla
PASO 1: Generación de la plantilla ITemplate
PASO 2: Control de eventos
Parte II: Construcción del GridView
PREVIO:
En este ejemplo, vamos a construir una columna de
CheckBox que controla un listado de test realizados por usuarios. El
nombre de cada columna hará referencia al campo equivalente en la DDBB (así, Test1 sería la columna de los datos para
el Test1). Además vamos a incluir en la cabecera una imagen que al pulsar, seleccionará todos los checks del gridview.
Parte I: Generación de la plantilla
PASO 1: Generación de la clase ITemplate
Para poder
referenciar nuestra columna desde el GridView, necesitamos proporcionarle al
sistema una forma de generar nuestra columna de CheckBox. Para ello hay que
crear una clase que implemente el interfaz
ITemplate.
En nuestro ejemplo, denominaremos a la clase GridViewCheckboxTemplate.
public
class GridViewCheckboxTemplate
: ITemplate
{
//Event handler - boton Header para “Seleccionar
Todos”
public event EventHandler ImageClick;
//atributo para almacenar el ListItemType.
ListItemType
_templateType;
//Atributo con el nombre identificador de la columna.
private string
_columnName;
//Constructor donde definimos el tipo y nombre.
public GridViewCheckboxTemplate(ListItemType type, string colname)
{
_templateType = type;
_columnName = colname;
}
}
El ListItemType es
el que nos indicará que parte del GridViewColumn estamos editando. Los valores
que puede tomar son Header, Item,
EditItem y Footer.
NOTA: En este caso, estamos generando
una columna a partir de un constructor con 2 parametros. Podríamos crear otros
constructores con más parámetros, en función de las necesidades.
Una vez
implementados los atributos y el constructor, debemos indicar al sistema cómo
ha de generar la vista de la columna en el GridView. Para ello, implementaremos
el método ITemplate.InstantiateIn:
void
ITemplate.InstantiateIn(System.Web.UI.Control container)
{
switch
(_templateType)
{
case ListItemType.Header:
//TODO – elementos de la cabecera.
break;
case ListItemType.Item:
//TODO – CheckBox en formato PRESENTACIÓN.
break;
case ListItemType.EditItem:
//TODO – CheckBox en formato EDICIÓN.
break;
case
ListItemType.Footer:
//TODO – elementos del footer.
break;
}
}
En la definición del
método anterior podemos observar que, en función del tipo de ítem que estemos
solicitando, el sistema generará unos controles u otros para el render de la columna completa. Por tanto,
ya podemos incluir los controles necesarios para nuestra personalización:
HEADER:
case
ListItemType.Header:
ImageButton imgButton = new ImageButton();
imgButton.ID = "imgHeader_"
+ _columnName;
imgButton.ImageUrl = "~/images/ico/check_all.png";
imgButton.ImageAlign =
ImageAlign.AbsMiddle;
imgButton.ToolTip = "Activar TODOS ";
imgButton.Click += new
ImageClickEventHandler(imgHeader_ClickEventHandler);
imgButton.Attributes.Add("onclick", "return
confirm('¿Seguro que desea activar todas las filas?');");
container.Controls.Add(imgButton);
//Creamos el label que indica en qué columna estamos.
Label
lbl = new Label();
lbl.Text = "
"+_columnName;
container.Controls.Add(lbl);
break;
Como se puede observar, para
cada control establecemos todas sus propiedades, entre las que cabe destacar:
· La Url relativa a la raíz
del proyecto la imagen que vamos a mostrar:
· El evento que se
disparará cuando se pulse sobre la imagen. Más adelante veremos cómo programar esta
función:
imgButton.Click += new ImageClickEventHandler(imgHeader_ClickEventHandler);
· Una confirmación de
activación para todos los elementos:
imgButton.Attributes.Add("onclick",
"return confirm('¿Seguro que desea activar todas
las filas?');");
ITEM y EDITITEM:
Como sólo vamos a
mostrar un checkBox, simplemente debemos añadir dicho control a la columna:
case
ListItemType.Item:
//Creamos el
checkBox.
CheckBox chk = new
CheckBox();
chk.EnableViewState = true;
chk.Enabled = false; //en vista, NO PERMITIMOS la modificación del valor.
chk.ID
= "chkItem_" + _columnName;
chk.DataBinding += new
EventHandler(CB1_DataBinding); //enlace a datos.
container.Controls.Add(chk);
break;
case
ListItemType.EditItem:
// Creamos el checkbox
para edición
CheckBox chkEdit = new
CheckBox();
chkEdit.EnableViewState = true;
chkEdit.Enabled = true; //en edición, PERMITIMOS la modificación del valor
chkEdit.ID
= "chkEditItem_" + _columnName;
chkEdit.DataBinding += new EventHandler(CB1_DataBinding); //enlace a datos.
container.Controls.Add(chkEdit);
break;
A
destacar el DataBinding que se
encargará de mostrar la información al generar el GridView (ver paso 2 ‘Control de Eventos’), y la opción Enabled que es la que permite la modificación del estado del checkbox.
FOOTER:
En este ejemplo, no
añadimos ningún elemento al footer, pero se podría personalizar con cualquier control
que necesitaramos. Como ejemplos; un botón para añadir un nuevo ítem, ó un
Label con información del total de registros, o ubicar aquí el selector multiple, etc.
NOTA: Recordar que si incluimos aquí cualquier control, en vista de diseño deberemos marcar el atributo ShowFooter a true.
NOTA: Recordar que si incluimos aquí cualquier control, en vista de diseño deberemos marcar el atributo ShowFooter a true.
PASO 2: Control de eventos
Una vez generado el método
para construir la columna debemos controlar los eventos de datos y, en este
ejemplo, del botón header para ‘Seleccionar
todos’.
Control del click
sobre la imagen
void
imgHeader_ClickEventHandler(object sender,
ImageClickEventArgs e)
{
if
(ImageClick != null) { ImageClick(sender, EventArgs.Empty); }
}
Aquí simplemente
verificamos que existe un EventHandler asociado a la imagen y en caso afirmativo, llamamos al
delegado. Éste será el encargado de modificar los datos y actualizar el grid.
Control de los datos
a mostrar
void CB1_DataBinding(object sender, EventArgs
e)
{
CheckBox chk = (CheckBox)sender; //Obtenemos
el control
GridViewRow container =
(GridViewRow)chk.NamingContainer; //contenedor con
datos
object
dataValue = DataBinder.Eval(container.DataItem, _columnName); //valor obtenido
chk.Checked = (dataValue.ToString() == "1"); //actualización
del check
}
Aquí obtendremos el
valor a mostrar en el CheckBox. Dado que en este ejemplo, en la DDBB tenemos una columna ‘Bit’,
deberemos marcar la selección en función de si el valor es ‘0’ ó ‘1’.
Llegados a este punto, ya tenemos configurada nuestra plantilla completa para la columna del gridView. Recordad que en este ejemplo estamos trabajando con un CheckBox, pero se podría personalizar para cualquier tipo de control e información que os hiciese falta.
En el próximo post
indicaré cómo hacer uso de esta clase, para generar nuestro grid personalizado.
Un saludo a todos!
[...]
Microsoft lanza un sistema de logros en Visual Studio
Etiquetas:
Achievements,
ASP.NET,
game,
plugins,
Visual Studio
Vamos con una entrada de juegos..... pero juegos para programadores.
Microsoft ha sacado "aún en versión beta" un plugin que nos ofrece una lista de "LOGROS" para todos aquellos que utilicemos Visual Studio. Es una forma de obtener un reconocimiento a nuestra forma de trabajar, y que este sea visible a todo el mundo (Achievements Visual Studio).
En concreto, se trata de un plugin para Visual Studio que obtiene información sobre tu metodología de trabajo en una solución y el análisis del código, y en función de esos datos, te irá desbloqueando distintos logros.
En principio los logros están dividios en seis secciones:
· Customizing Visual Studio
· Don't Try This At Home
· Good Housekeeping
· Just For Fun
· Power Coder
· Unleashing Visual Studio
(Ojo!! no todos los logros podrían estar bien vistos,.. el logro de Go To Hell me encanta!! - XD)
Pero no acaba ahí la historia. Dado que generas un registro en channel9.msdn.com, tus logros adquiridos pasarán a estar permanentemente publicados, con lo que podrás compararte con otros programadores del mundo... además permite su publicación en blogs y social media.
A qué estás esperando, conviértete en un Gamer del Visual Studio!
...¿a que no puedes probar sólo una? ...
REFERENCIAS
Announcing Visual Studio Achievements Beta
Achievements Visual Studio [...]
Microsoft ha sacado "aún en versión beta" un plugin que nos ofrece una lista de "LOGROS" para todos aquellos que utilicemos Visual Studio. Es una forma de obtener un reconocimiento a nuestra forma de trabajar, y que este sea visible a todo el mundo (Achievements Visual Studio).
En concreto, se trata de un plugin para Visual Studio que obtiene información sobre tu metodología de trabajo en una solución y el análisis del código, y en función de esos datos, te irá desbloqueando distintos logros.
En principio los logros están dividios en seis secciones:
· Customizing Visual Studio
· Don't Try This At Home
· Good Housekeeping
· Just For Fun
· Power Coder
· Unleashing Visual Studio
(Ojo!! no todos los logros podrían estar bien vistos,.. el logro de Go To Hell me encanta!! - XD)
Pero no acaba ahí la historia. Dado que generas un registro en channel9.msdn.com, tus logros adquiridos pasarán a estar permanentemente publicados, con lo que podrás compararte con otros programadores del mundo... además permite su publicación en blogs y social media.
A qué estás esperando, conviértete en un Gamer del Visual Studio!
...¿a que no puedes probar sólo una? ...
REFERENCIAS
Announcing Visual Studio Achievements Beta
Achievements Visual Studio [...]
Remoting Flash MX y su instalación en Windows7 y Adobe Flash CS5.5
Etiquetas:
ActionScript,
AS2,
AS3,
Flash,
MX,
Remoting Components
Tal y como indica el título, hoy os voy a indicar cómo instalar las librerías de los Remoting MX para AS2 en una máquina Windows 7, sobre Adobe Flash CS 5.5
Si al igual que yo, muchos de vosotros os encontráis desarrollando en Flash ActionScript y habéis decidido actualizar vuestro software, os encontraréis con el problema de migrar las apliaciónes de AS2 con Remoting Components a la nueva versión de Flash.
Aunque yo ya llevo mucho tiempo trabajando en AS3 sobre Fluorine Remotings (y os recomiendo encarecidamente que os paséis a esta versión del lenguaje de desarrollo), podéis encontraros en la necesidad de recuperar algún proyecto antiguo en AS2 que use aún esta tecnología.
Pues bien, para instalar esas dichosas librerías, debéis realizar los siguientes pasos:
INSTALACIÓN DE LAS LIBRERÍAS
1- Descarga del conjunto de librerías "\mx" "aquí". Por cortesía de este mágnifico post http://blog.alastairdawson.com/2007/04/17/actionscript-20-flash-remoting-with-flash-cs3/
2- Desde el explorador, accede a la carpeta '\First Run\Classes\' de la instalación de Adobe Flash, dentro de la carpeta de idioma instalado. En mi caso:
C:\Program Files (x86)\Adobe\Adobe Flash CS5.5\es_ES\First Run\Classes\
3- Descomprime el archivo zip y ubica los elementos en dicha carpeta.
CONFIGURACIÓN DEL FLASH
4- Abre el flash CS5.5 y accede a "Edición/Preferencias", y en la ventana emergente, a la categoría "ActionScript". Una vez en las opciones, pulsa sobre "Configuración de ActionScript 2.0".
5- Sobre la ventana emergente que te saldrá, pulsa sobre el icono de la carpeta para seleccionar la ubicación de los archivos que instalaste en el paso 3, y pulsa Aceptar. Verás que se añade a tu lista de clases, las nuevas referencias que le has indicado.
6- Confirma todos los pasos y cierra las ventanas, y ... listo, ya tienes los remotings 2.0 instalados y referenciados en Flash CS5.5 sobre Windows7.
Como siempre, espero que os haya sido de utilidad.
¡Hasta la próxima!
[...]
Si al igual que yo, muchos de vosotros os encontráis desarrollando en Flash ActionScript y habéis decidido actualizar vuestro software, os encontraréis con el problema de migrar las apliaciónes de AS2 con Remoting Components a la nueva versión de Flash.
Aunque yo ya llevo mucho tiempo trabajando en AS3 sobre Fluorine Remotings (y os recomiendo encarecidamente que os paséis a esta versión del lenguaje de desarrollo), podéis encontraros en la necesidad de recuperar algún proyecto antiguo en AS2 que use aún esta tecnología.
Pues bien, para instalar esas dichosas librerías, debéis realizar los siguientes pasos:
INSTALACIÓN DE LAS LIBRERÍAS
1- Descarga del conjunto de librerías "\mx" "aquí". Por cortesía de este mágnifico post http://blog.alastairdawson.com/2007/04/17/actionscript-20-flash-remoting-with-flash-cs3/
2- Desde el explorador, accede a la carpeta '\First Run\Classes\' de la instalación de Adobe Flash, dentro de la carpeta de idioma instalado. En mi caso:
C:\Program Files (x86)\Adobe\Adobe Flash CS5.5\es_ES\First Run\Classes\
3- Descomprime el archivo zip y ubica los elementos en dicha carpeta.
CONFIGURACIÓN DEL FLASH
4- Abre el flash CS5.5 y accede a "Edición/Preferencias", y en la ventana emergente, a la categoría "ActionScript". Una vez en las opciones, pulsa sobre "Configuración de ActionScript 2.0".
5- Sobre la ventana emergente que te saldrá, pulsa sobre el icono de la carpeta para seleccionar la ubicación de los archivos que instalaste en el paso 3, y pulsa Aceptar. Verás que se añade a tu lista de clases, las nuevas referencias que le has indicado.
6- Confirma todos los pasos y cierra las ventanas, y ... listo, ya tienes los remotings 2.0 instalados y referenciados en Flash CS5.5 sobre Windows7.
Como siempre, espero que os haya sido de utilidad.
¡Hasta la próxima!
[...]
Cambiar la versión de ASP.NET de una aplicación en IIS6 desde la línea de comandos
Etiquetas:
Application Pool,
ASP.NET,
IIS,
IIS6,
MS-Dos,
Net Framework
Como indica el titulo de esta entrada, vamos a ver a continuación cómo modificar el NET Framework de una aplicación desde la línea de comandos, sin necesidad de utilizar la ventana de propiedades del Administrador de IIS 6.
ANTECEDENTES:
El motivo de generar esta entrada viene provocado por un pequeño problema que encontré al intentar crear una nueva aplicación en mi servidor de aplicaciones, el cual asigna por defecto la version 1.0 de ASP.NET. Este problema consistía en que cada vez que se generaba una nueva aplicación, el IIS se veía forzado a reiniciarse y provocaba una desconexión temporal de todas las aplicaciones que colgaban del directorio raíz o 'Sitio Web Predeterminado'.
Para evitar este reinicio, tenemos la opción de ejecutar el comando 'aspnet_regiis' desde el editor MS-DOS.
Los PASOS QUE DEBEMOS SEGUIR para crear una aplicación nueva son:
1. Generar la nueva apliación desde el IIS
2. Abrir la consola de "Símbolo de Sistema" y ejecutar la herramienta de registro desde la carpeta del framework adecuado.
1. Generar la nueva aplicación desde el IIS
A la hora de generar una aplicación, deberemos indicar desde la ventana de Propiedades-> Directorio el grupo de aplicaciones en la que desearemos incluirla. En nuestro ejemplo, la incluiremos en la versión 4.0, marcando dicha opción en el selector de grupo:
Si accedemos a la pestaña Propiedades->ASP.NET, en donde se indica la versión del framework, veremos que está marcada la que el sistema tiene por defecto. En nuestro ejemplo, la versión 1.1.
En la mayoría de los casos podremos modificar directamente aquí el valor sin mayor problema, pero si os ocurre lo mismo que a mi, deberéis utilizar la linea de comandos para modificarlo sin riesgo.
2. Abrir la consola de "Símbolo de Sistema" y ejecutar la herramienta de registro desde la carpeta del framework adecuado.
Lo primero que debemos hacer, tras abrir la consola, es ubicarnos en la carpeta contenedora del framework que deseamos actualizar, para ejecutar el comando de registro. Todos los frameworks instalados se encuentran en la carpeta C:\WINDOWS\Microsoft.NET\Framework.
Por tanto, y siguiendo con nuestro ejemplo, tendríamos que ejecutar la siguiente línea:
c:\ cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
Una vez en la carpeta, sólo quedaría ejecutar el comando que modificará nuestra versión de la aplicación:
aspnet_regiis -norestart -s W3SVC/[WebSiteID]/ROOT/[SampleApp1]
La sentencia final quedaría así:
c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319>aspnet_regiis -norestart -s W3SVC/1/ROOT/Prueba
Con esto habremos conseguido modificar la versión, sin reiniciar el IIS. Si volvemos ahora a nuestro administrador IIS, veremos que la versión de ASP.NET se ha actualizado correctamente.
¡Espero que os haya servido!
Un saludo y hasta la próxima.
[...]
ANTECEDENTES:
El motivo de generar esta entrada viene provocado por un pequeño problema que encontré al intentar crear una nueva aplicación en mi servidor de aplicaciones, el cual asigna por defecto la version 1.0 de ASP.NET. Este problema consistía en que cada vez que se generaba una nueva aplicación, el IIS se veía forzado a reiniciarse y provocaba una desconexión temporal de todas las aplicaciones que colgaban del directorio raíz o 'Sitio Web Predeterminado'.
Para evitar este reinicio, tenemos la opción de ejecutar el comando 'aspnet_regiis' desde el editor MS-DOS.
Los PASOS QUE DEBEMOS SEGUIR para crear una aplicación nueva son:
1. Generar la nueva apliación desde el IIS
2. Abrir la consola de "Símbolo de Sistema" y ejecutar la herramienta de registro desde la carpeta del framework adecuado.
1. Generar la nueva aplicación desde el IIS
A la hora de generar una aplicación, deberemos indicar desde la ventana de Propiedades-> Directorio el grupo de aplicaciones en la que desearemos incluirla. En nuestro ejemplo, la incluiremos en la versión 4.0, marcando dicha opción en el selector de grupo:
En la mayoría de los casos podremos modificar directamente aquí el valor sin mayor problema, pero si os ocurre lo mismo que a mi, deberéis utilizar la linea de comandos para modificarlo sin riesgo.
2. Abrir la consola de "Símbolo de Sistema" y ejecutar la herramienta de registro desde la carpeta del framework adecuado.
Lo primero que debemos hacer, tras abrir la consola, es ubicarnos en la carpeta contenedora del framework que deseamos actualizar, para ejecutar el comando de registro. Todos los frameworks instalados se encuentran en la carpeta C:\WINDOWS\Microsoft.NET\Framework.
Por tanto, y siguiendo con nuestro ejemplo, tendríamos que ejecutar la siguiente línea:
c:\ cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
Una vez en la carpeta, sólo quedaría ejecutar el comando que modificará nuestra versión de la aplicación:
aspnet_regiis -norestart -s W3SVC/[WebSiteID]/ROOT/[SampleApp1]
La sentencia final quedaría así:
c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319>aspnet_regiis -norestart -s W3SVC/1/ROOT/Prueba
Con esto habremos conseguido modificar la versión, sin reiniciar el IIS. Si volvemos ahora a nuestro administrador IIS, veremos que la versión de ASP.NET se ha actualizado correctamente.
NOTA IMPORTANTE:
aspnet_regiis -norestart -s W3SVC/[WebSiteID]/ROOT/[SampleApp1]
Donde:
· [WebSiteID] es el identificador numérico del sitio web padre (por eso, modificar el sitio web por defecto es el 1)
· [SampleApp1] es la ruta de acceso desde el raiz del website
a modificar;
Para encontrar dicho ID,
simplemente debéis entrar en el IIS y pulsar en “sitios web” para mostrar el
listado de todos los sitios. Luego, el numero que se encuentra en la columna
“Identificar” es el que corresponda con el website que deseamos actualizar.
Importar tipografías en un HTML con CSS y @font-face
Etiquetas:
CSS,
font-face,
font-family,
HTML
La verdad es que durante mucho tiempo he estado buscando información sobre cómo importar fuentes externas en los diseños HTML, y después de muchas búsquedas (algunas infructuosas o que no me llevaban a ningún sitio), he encontrado dos formas muy sencillas de realizar este trabajo.
· Google Fonts
· Font Squirrel
Normalmente se suelen incorporar utilizando varias técnicas, pero al final casi todas requieren del uso de @font-face en los estilos CSS. En algunos casos acababa encontrando conversores especiales de fuentes al formato EOT que sólo se veían en Internet Explorer, o en otros casos soluciones parciales que no se visualizaban en todos los navegadores.
GOOGLE FONTS
El uso de esta forma de implementar tipografías poco comunes es muy sencillo. Simplemente accedes a http://www.google.com/webfonts, buscas la fuente en una extensa lista disponible, y te mostrará el código que debes incluir en tu página para poder utilizarla (en formato <link type='text/css' >).
PROS:
· Uso sencillo
· Dispone de un buscador
· No necesita licencia
· Es compatible con todos los navegadores
CONTRAS:
· Algunos podrían decir que no dispone de demasiadas fuentes
FONT SQUIRREL
Font Squirrel es una magnífica aplicación con la que tendréis un generador de fuentes para su importación, totalmente gratuito y de muy fácil implementación (yo ya llevo un tiempo utilizándolo y puedo deciros que no me ha fallado en ningún navegador).
Os aseguro que hará las delicias de todos aquellos que queráis dar una "pinta especial" a vuestras webs.
Podéis acceder al generador a través de: http://www.fontsquirrel.com/fontface/generator
Mediante un sencillo interfaz podréis incorporar varias fuentes al generador, y el sistema creará un archivo descargable con todos los elementos necesarios para su uso. Dentro de dicho archivo también encontraréis ejemplos de código y vistas previas del resultado final.
PROS:
· Permite la conversión de cualquier fuente
· Es compatible con todos los navegadores
· En el archivo descargable vienen ejemplos de uso
CONTRAS:
· Se debe tener licencia legal sobre las fuentes a utilizar.
· Aunque es muy sencillo de utilizar, es posible que requiera de un conocimiento básico de CSS y HTML para no tener problemas al usarlo.
NOTA: Aunque es un servicio gratuito, siempre podréis donar un dinerillo para que siga en marcha.
Un saludo, y hasta la próxima. [...]
· Google Fonts
· Font Squirrel
Normalmente se suelen incorporar utilizando varias técnicas, pero al final casi todas requieren del uso de @font-face en los estilos CSS. En algunos casos acababa encontrando conversores especiales de fuentes al formato EOT que sólo se veían en Internet Explorer, o en otros casos soluciones parciales que no se visualizaban en todos los navegadores.
GOOGLE FONTS
El uso de esta forma de implementar tipografías poco comunes es muy sencillo. Simplemente accedes a http://www.google.com/webfonts, buscas la fuente en una extensa lista disponible, y te mostrará el código que debes incluir en tu página para poder utilizarla (en formato <link type='text/css' >).
PROS:
· Uso sencillo
· Dispone de un buscador
· No necesita licencia
· Es compatible con todos los navegadores
CONTRAS:
· Algunos podrían decir que no dispone de demasiadas fuentes
FONT SQUIRREL
Font Squirrel es una magnífica aplicación con la que tendréis un generador de fuentes para su importación, totalmente gratuito y de muy fácil implementación (yo ya llevo un tiempo utilizándolo y puedo deciros que no me ha fallado en ningún navegador).
Os aseguro que hará las delicias de todos aquellos que queráis dar una "pinta especial" a vuestras webs.
Podéis acceder al generador a través de: http://www.fontsquirrel.com/fontface/generator
Mediante un sencillo interfaz podréis incorporar varias fuentes al generador, y el sistema creará un archivo descargable con todos los elementos necesarios para su uso. Dentro de dicho archivo también encontraréis ejemplos de código y vistas previas del resultado final.
PROS:
· Permite la conversión de cualquier fuente
· Es compatible con todos los navegadores
· En el archivo descargable vienen ejemplos de uso
CONTRAS:
· Se debe tener licencia legal sobre las fuentes a utilizar.
· Aunque es muy sencillo de utilizar, es posible que requiera de un conocimiento básico de CSS y HTML para no tener problemas al usarlo.
NOTA: Aunque es un servicio gratuito, siempre podréis donar un dinerillo para que siga en marcha.
Un saludo, y hasta la próxima. [...]
Agregar una propiedad en un control de usuario con C# y Atributos
Etiquetas:
ASP.NET,
Atributos,
Attributes,
C#,
ComponentModel,
UserControl
En estos días he tenido la necesidad de hacer un control de usuario personalizado, de forma que se pudiera reutilizar en dos formatos distintos. Concretamente se trataba de un control que mostraba las etiquetas de un blog y que podía presentarse de dos formas distintas:
· en formato lista (tag list)
· en formato nube (o cloud tags)
Dado que los controles se cargan en la página mediante el uso de <%@ Register %>, quería que tuviese un parámetro opcional con valores personalizados (y uno por defecto) y que estuviese accesible, mostrando todos los valores posibles, desde la vista de diseño.
Evidentemente esto se puede realizar de muchas formas, pero quería utilizar los atributos existentes en .NET, por lo que el siguiente desarrollo está encaminado hacia ese uso.
GENERACIÓN DEL CÓDIGO
Lo primero que debemos crear es una enumeración con los valores que necesitamos controlar con posterioridad. Dado que en este caso, lo que queremos controlar es el tipo de "display" que vamos a ejecutar al cargar el control, vamos a generar una enumeración auxiliar llamada DisplayOption. Así, obtendríamos el siguiente fragmento de código:
public enum DisplayOption
{
ToList,
ToCloud
}
Aunque el sistema podría reconocer directamente la propiedad pública, es bueno y recomendable hacer uso de los atributos, desde donde podremos indicarle si es accesible, a qué categoría pertenece, el valor por defecto y una breve descripción. Según esto, el código resultante sería:
[Browsable(true),
Category("Appearance"),
DefaultValue(DisplayOption.ToList),
Description("Indica el tipo de desplegado usado para la visualización.")]
public DisplayOption Display { get; set; }
NOTA: Se debe utilizar la librería "using System.ComponentModel;" para que el sistema reconozca los atributos utilizados.
Ya sólo nos queda modificar el código fuente del control para formatear la información según el valor que tenga la propiedad. Esto se podría hacer en la carga del control de forma:
protected void Page_Load(object sender, EventArgs e)
{
if (Display == DisplayOption.ToList)
GeneraListaDeEtiquetas();
else
GeneraNubeDeEtiquetas();
}
Una vez realizado este punto, ya podríamos acceder a dicha propiedad desde el diseñador, y además tendríamos listados en ella todos los elementos. Aunque no incluyesemos dicha propiedad en el diseñador, ya tendría un valor asignado por el atributo.
Así, tendríamos en la página contenedora el siguiente fragmento de código disponible:
<%@ Register TagPrefix="ctrl" TagName="NavTags" Src="~/controls/NavTagControl.ascx" %>
<ctrl:NavTags runat="server" ID="NavTagControl" Display="ToCloud" />
Aquí podéis ver una captura del efecto final.
Enlaces de referencia:
User Controls Custom Properties
Walkthrough: Developing and Using a Custom Server Control
[...]
· en formato lista (tag list)
· en formato nube (o cloud tags)
Dado que los controles se cargan en la página mediante el uso de <%@ Register %>, quería que tuviese un parámetro opcional con valores personalizados (y uno por defecto) y que estuviese accesible, mostrando todos los valores posibles, desde la vista de diseño.
Evidentemente esto se puede realizar de muchas formas, pero quería utilizar los atributos existentes en .NET, por lo que el siguiente desarrollo está encaminado hacia ese uso.
GENERACIÓN DEL CÓDIGO
Lo primero que debemos crear es una enumeración con los valores que necesitamos controlar con posterioridad. Dado que en este caso, lo que queremos controlar es el tipo de "display" que vamos a ejecutar al cargar el control, vamos a generar una enumeración auxiliar llamada DisplayOption. Así, obtendríamos el siguiente fragmento de código:
public enum DisplayOption
{
ToList,
ToCloud
}
Una vez generada nuestra enumeración, debemos crear una propiedad pública en nuestro control. De esta forma, el sistema identificará dicha propiedad con el valor que le asignemos y desde ese momento, podrá trabajar con él.
public DisplayOption Display { get; set; }
public DisplayOption Display { get; set; }
Aunque el sistema podría reconocer directamente la propiedad pública, es bueno y recomendable hacer uso de los atributos, desde donde podremos indicarle si es accesible, a qué categoría pertenece, el valor por defecto y una breve descripción. Según esto, el código resultante sería:
[Browsable(true),
Category("Appearance"),
DefaultValue(DisplayOption.ToList),
Description("Indica el tipo de desplegado usado para la visualización.")]
public DisplayOption Display { get; set; }
NOTA: Se debe utilizar la librería "using System.ComponentModel;" para que el sistema reconozca los atributos utilizados.
Ya sólo nos queda modificar el código fuente del control para formatear la información según el valor que tenga la propiedad. Esto se podría hacer en la carga del control de forma:
protected void Page_Load(object sender, EventArgs e)
{
if (Display == DisplayOption.ToList)
GeneraListaDeEtiquetas();
else
GeneraNubeDeEtiquetas();
}
Una vez realizado este punto, ya podríamos acceder a dicha propiedad desde el diseñador, y además tendríamos listados en ella todos los elementos. Aunque no incluyesemos dicha propiedad en el diseñador, ya tendría un valor asignado por el atributo.
Así, tendríamos en la página contenedora el siguiente fragmento de código disponible:
<%@ Register TagPrefix="ctrl" TagName="NavTags" Src="~/controls/NavTagControl.ascx" %>
<ctrl:NavTags runat="server" ID="NavTagControl" Display="ToCloud" />
Aquí podéis ver una captura del efecto final.
Enlaces de referencia:
User Controls Custom Properties
Walkthrough: Developing and Using a Custom Server Control
[...]
Suscribirse a:
Entradas (Atom)