October 2006 - Posts

ASP.NET Tip: Definiendo un botón como el predeterminado en nuestro formulario web

A veces contamos con un formulario que tiene varios controles de tipo botón y necesitas hacer que cuando el usuario presione enter alguno de esos botones sea el predeterminado y responda al evento. En ASP.NET 1.x teníamos que escribir un poco de código javascript para decirle al navegador que capture el evento "keypress" y revise si fue un enter y entonces ejecute un postback. En fin, con ASP.NET 2.0 tenemos una propiedad de nuestro formulario llamada DefaultButton el cual nos permite especificar que botón será utilizado como el predeterminado para cuando el usuario presione enter. ASP.NET 2.0 se encarga de generar y manejar el código javascript.

Page.Form.DefaultButton = myboton.UniqueID;

Posted by haaron | 3 comment(s)
Filed under: ,

ASP.NET Tip: Obteniendo la lista de temas (themes) de un sitio web

Cuando trabajamos con funcionalidad de temas y perfiles en ASP.NET 2.0 es muy tentador ofrecerle al usuario final la posibilidad de que el mismo seleccione que tema desea para su interacción. Esto nos lleva a mostrar en algún lugar la lista de temas disponibles para su selección. Bien, aquí es donde el siguiente código puede ser útil como una implementación para lograr lo anterior.

String[] temas;

temas = Directory.GetDirectories(Server.MapPAth("App_Themes"));

For(int i = 0; I < temas.Lenght; i++)

{

temasIdea = new FileInfo(temasIdea).Name;

}

Posted by haaron | with no comments
Filed under: ,

ASP.NET Tip: Definiendo el foco de un control cuando este no cumple alguna regla de validacio

Para especificarle el foco (cursor) a cualquier control de nuestro formulario simplemente ejecutamos un método de la clase Page.

Page.SetFocus(miControl)

Esto parece ser muy sencillo, sin embargo una útil implementación es cuando la combinamos con otros controles. En el siguiente ejemplo muestro como definir el foco de un control cuando este no cumple con alguna regla de validación, lo que hice fue arrastrar tres controles TextBox y tres RequiredFieldValidator configurando que la validación no se haga del lado del cliente sino del lado servidor podemos habilitar el siguiente código.

protected void Button1_Click(object sender, EventArgs e)

{

if (Page.IsValid)

{ }

else

{

foreach (BaseValidator validator in Page.Validators)

{

if (!validator.IsValid)

{

SetFocus(validator.ControlToValidate);

break;

}

}

}

}

Posted by haaron | with no comments
Filed under: ,

Conoce el primer beta de AJAX para ASP.NET

Al fin tuve el tiempo de experimentar ASP.NET 2.0 AJAX mundialmente conocido por su nombre de código "Atlas". El nombre oficial de este componente será ASP.NET 2.0 AJAX y ya tenemos la primera versión beta liberada. Altamente recomendable darse un tiempo para conocer los componentes que integran este marco de trabajo para la construcción de aplicaciones web asincrónicas.  


"nunca pensé que un producto de limpieza tan famoso, llegara a influir tanto en mi vida profesional" :)

Microsoft liberó tres componentes en esta primera versión del Beta como lo dice Scott Guthrie en este post.

El ASP.NET AJAX v1.0 "Core" contiene prácticamente el motor principal de todo este marco de trabajo así que para poder construir e implementar aplicación ASP.NET AJAX necesitaras instalar este componente en tu servidor web. Este componente cuenta con ambos marcos de trabajo los que nos sirven del lado del servidor y del lado del cliente, en el primer caso contamos con tipos, clases base y prácticamente todo el modelo de objetos para desarrollo. En el segundo contamos con un conjunto de archivos javascript que prácticamente han sido modificados para un uso más óptimo en el navegador y omitir tanta sobrecarga de este tipo de código. Por fin los componentes de AJAX los tenemos integrados al GAC.

El ASP.NET AJAX "Value-Add" CTP es otro componente interesante que contiene controles y funcionalidad adicional que no alcanzó ser parte del beta pero que sin embargo seguimos esperando. Además, este componente soporta la mayoría de los objetos que utilizábamos en "Atlas" con la finalidad de seguir trabajando por cuestiones de soporte con aplicaciones anteriores. Microsoft público una matriz de características que presenta qué características se encuentran en ASP.NET AJAX "Core" o ASP.NET AJAX CTP, si has venido siguiendo esta tecnología vale la pena que le des una revisada.

El ASP.NET AJAX Control Toolkit son los controles AJAX construidos encima del ASP.NET AJAX "Core", además todas las plantillas de proyecto para las ediciones de Visual Studio 2005, binarios y sitio web de ejemplo están incluidos aquí. Todo lo que necesitas para desarrollar aplicaciones AJAX con ASP.NET 2.0.

Definitivamente estaré modificando el material de la presentación "AJAX y su integración con las plataformas de desarrollo" que tengo que dar precisamente mañana en el Developer Community Day en la ciudad de Mexicali, Baja California México, regístrate aquí.

Posted by haaron | with no comments
Filed under: , ,

Seleccionador de cliente de control de codigo

En algún momento de tu vida vas a ocupar un tipo de herramienta muy peculiar, un seleccionador de control de código no nos cae nada más. Cuando trabajamos con múltiples servidores de control de código como GotDotNet, cliente de Source Safe 2003 o Source Safe 2005, entre otros resulta que Visual Studio no tiene un seleccionador de clientes de control de código muy asertivo que digamos, por decirlo así. Al final del día es simplemente la manipulación de una llave del registro de Windows para especificarle a Visual Studio que cliente de control de código utilizar como predeterminado. No se tú, pero yo no acostumbro por varias razones moverle al registro de Windows. En fin.

Aquí te dejo algunas herramientas para seleccionar el cliente de control de código que queramos utilizar sobre Visual Studio:

Fuente: http://blogs.msdn.com/michalma/archive/2006/03/01/541255.aspx

Posted by haaron | with no comments
Filed under: ,

TFS trabajando con .NET 2003 y VB6

Para las personas que me preguntaron cómo habilitar escenarios de desarrollo TFS con Visual Studio .NET 2003 aquí les dejo el componente que les comente. Es el Visual Studio 2005 Team Foundation Server MSSCCI Provider, un componente que nos permite utilizar la funcionalidad del control de versiones de Team Foundation Server en productos que no soportan tienen el Team Explorer. Ahora ya podemos trabajar con proyectos de desarrollo en otras versiones de .NET o incluso en otros productos de desarrollo como Visual Basic 6 e integrar todo el valor de TFS. 

Checa la lista de productos soportados por el MSSCCI Provider.

  • Visual Studio .NET 2003
  • Visual C++ 6 SP6
  • Visual Visual Basic 6 SP6
  • Visual FoxPro 9 SP1
  • Microsoft Access 2003 SP2
  • SQL Server Management Studio
  • Sparx Systems Enterprise Architect 6.0
  • Sybase PowerBuilder 10.5

Así que hasta los amigos de Sybase se pueden enrolar al uso de esta fabulosa solución para el desarrollo en equipo.

Para mis amigos jefes de desarrollo que siguen trabajando con Visual Studio .NET 2003 les dejo unos Screen Shots.

En esta primer imagen nos conectamos a un servidor TFS para hacer Check In de los archivos de un proyecto de tipo web.

tfsvs200301.jpg 

Y por ultimo en esta imagen mostramos que tareas de TFS han sido afectadas. Soporta el uso de los Check In Policy.

tfsvs200302.jpg 

Para mis otros amigos que siguen usando Visual Basic 6 aquí les dejo este ejemplo: http://myvstsblog.com/archive/2006/02/02/103.aspx

Posted by haaron | 2 comment(s)
Filed under:

Integracion de las capacidades de SQL Server 2005 Reporting Services a Windows SharePoint Services v2

Últimamente he tenido que configurar una serie de servidores Windows SharePoint Services para que soporten integración con SQL Server 2005 Reporting Services. Muy sencillo es lograr lo anterior simplemente realizando las siguientes instrucciones en la consola:

  1. C:\Documents and Settings\Administrator>cd\
  2. C:\>cd "Program Files"
  3. C:\Program Files>cd "Common Files"
  4. C:\Program Files\Common Files>cd "Microsoft Shared"
  5. C:\Program Files\Common Files\Microsoft Shared>cd web server extensions
  6. C:\Program Files\Common Files\Microsoft Shared\web server extensions>cd 60
  7. C:\Program Files\Common Files\Microsoft Shared\web server extensions\60>cd bin
  8. C:\Program Files\Common Files\Microsoft Shared\web server extensions\60\BIN>stsadm.exe -o addpath -url http://localhost/reports -type exlusion
  9. C:\Program Files\Common Files\Microsoft Shared\web server extensions\60\BIN>stsadm.exe -o addpath -url http://localhost/reportserver -type exlusion

Con estas instrucciones lo que hacemos es registrar los dos directorios virtuales creados por Reporting Services para que el parser de SharePoint las reconozca como miembro valido y no intente bloquear su acceso. Y por ultimo registramos los web parts de SQL Server 2005 Reporting Services para tenerlos disponibles sobre SharePoint.

  1. C:\Program Files\Common Files\Microsoft Shared\web server extensions\60\BIN>stsadm.exe –o addwppack –filename "c:\program files\microsoft sql server\90\tools\reporting services\sharepoint\rswebparts.cab"

El resultado:  (webparts disponibles para visualizar reportes Reporting Services)

postrep01.jpg 

El alcance de esto: (Integracion de las capacidades de repoteo de Reporting Services a nuestras soluciones SharePoint)

postrep02.jpg 

Posted by haaron | 1 comment(s)

Próximos eventos

Una serie de cambios profesionales se han venido presentando en los últimos meses. Claro, como siempre muy importantes para mí crecimiento profesional. Lo que si no cambia es la oportunidad de compartir con gente de todo tipo, desde desarrolladores profesionales hasta gerentes de departamentos de informática. Es por esto que aquí dejo las próximas fechas de presentaciones algunas en línea otras presenciales que estaré impartiendo en los próximos dos meses:

NombreFechaLugarTipoInformes
AJAX y su integración a los sistemasOctubre 27, 2006Mexicali, BC.PlaticaDeveloper Community Day en Mexicali
Desarrollando con Visual Studio 2005 y Microsoft Office 2007Octubre 27, 2006Mexicali, BCPlaticaDeveloper Community Day en Mexicali
Nuevas características en Windows VistaNoviembre 1, 2006Tijuana, BCPlaticaDeveloper Community Day en Tijuana
Visual Studio 2005 Team System, herramientas integradas para efectivos desarrollosNoviembre 1, 2006Tijuana, BCPlaticaComunidad Tijuana.NET
Cómo habilitar una estrategia Integral de colaboración empresarial haciendo uso de la Plataforma Microsoft1 de Noviembre del 2006Tijuana, BCPlaticaComunidad Tijuana.NET
Cómo habilitar una estrategia Integral de colaboración empresarial haciendo uso de la Plataforma Microsoft10 de Noviembre del 2006 WebCastRegistro
Construyendo Clientes Inteligentes con Microsoft Office InfoPath 2007 y Windows SharePoint Services 3.017 de Noviembre del 2006 WebCastRegistro
     

Saludos y nos vemos por allá.

Posted by haaron | 1 comment(s)
Filed under:

Escaneado en SharePoint

A mi buen amigo Luis Du Solier MVP en SharePoint le va a encertar saber de una herramienta llamada Scaning Enabler de la compañía DARK BLUE DUCK. Esta herramienta permite a SharePoint soportar escenarios de escaneado desde lo que es el proceso de escaneado hasta subir el contenido a SharePoint. Agregar metadatos e información de contexto también es soportado y por si fuera poco, funciona con SharePoint 2003 y SharePoint 2007.

Bueno pues. Saludos.

Posted by haaron | 2 comment(s)
Filed under:

Virtual PC 2007 Beta disponible y funcionando!

Pero mira que belleza. Resulta que hoy se libero el Beta de Virtual PC 2007 como lo dice la siguiente dirección: https://connect.microsoft.com/programdetails.aspx?ProgramDetailsID=874. Lo más emocionante del caso es que trabaja perfectamente con Windows Vista, que bueno porque estaba preocupado por unas platicas que tengo que dar más adelante y ocupo montar mi ambiente de maquinas virtuales para poder hacer mis demos y con la versión anterior instalada sobre Windows Vista Ultimate Edition simplemente complejo de trabajar ya que no estaba soportada.

Si quieres ver los detalles de lo nuevo aquí está esta dirección. Mientras tanto yo feliz con mi ambiente.

Virtual PC 2007 Beta 

Posted by haaron | 3 comment(s)
Filed under:

Ejemplo Practico UpdatePanel y UpdateProgress

Tratando de encontrar un ejemplo práctico que pueda ilustrar mejor lo que escribí hace unos días sobre lo básico de los controles UpdatePanel y UpdateProgress dejo a continuación un proyecto ASP.NET 2.0 que implementa la funcionalidad antes mencionada en el siguiente escenario.

De que se trata

En la base de datos AdventureWorks contamos con la tabla Product la cual contiene información sobre productos y datos adicionales relacionados con el control de inventarios. En este escenario lo que haremos es permitir al usuario actualizar la información de control de inventario para cada producto. En un control GridView mostramos los productos filtrados por una sub categoría y además habilitamos en la vista principal la capacidad de que se capture la información de dos columnas (Nivel Optimo y Punto de Reorden). Una vez que el usuario termine de capturar la información da clic sobre el botón actualizar el cual se encarga de recorrer el listado y hacer la actualizaciones correspondientes.

ejemplopractico01.jpg  

Mediante el uso de Atlas UpdatePanel y UpdateProgress creamos una interface de usuario verdaderamente responsiva para este sencillo proceso logrando que el usuario tenga una mejor experiencia.

Como funciona

Nosotros podemos especificar que eventos de los controles de nuestro formulario web disparan una llamada asincrónica realizada por el control UpdatePanel a través de la sección “<Triggers>”. Como vemos en la siguiente declaración dentro de la sección “<Triggers>” estamos diciendo que cuando el “Button1” dispare el evento “Click” entonces nuestro control UpgradePanel realizara su trabajo. Lo mismo sucede con el evento “SelectIndexChanged” de nuestro control “DropDownList1” causando que nuestro GridView simplemente se refresque sin realizar un PostBack al servidor. [Ver ejemplo 1]. Ahora nuestro control GridView tiene un comportamiento muy sencillo ya que para renglón mostrado en las columnas donde requerimos captura de datos simplemente mostramos un control de tipo TextBox. Eso lo logramos utilizando la funcionalidad de “<ItemTemplate>” de una columna de tipo “<TemplateField>”. Una columna de tipo “<TemplateField>” en cualquier contexto de los controles GridView, DetailsView, etc. Nos permite contener y mostrar cualquier código XHTML. [Ver ejemplo 2].

<atlas:UpdatePanel ID="UpdatePanel1" runat="server">

<!—ejemplo 1 -->

<Triggers>

<atlas:ControlEventTrigger ControlID="DropDownList1" EventName="SelectedIndexChanged" />

<atlas:ControlEventTrigger ControlID="Button1" EventName="Click" />

</Triggers>

<ContentTemplate>

<asp:GridView

ID="GridView1"

runat="server"

AutoGenerateColumns="False"

DataKeyNames="ProductID"

DataSourceID="productsDataSource"

Width="601px"

GridLines="None"

BorderStyle="None"

CaptionAlign="Right" BorderWidth="3px" CellPadding="5">

<Columns>

<asp:BoundField DataField="ProductID" HeaderText="ProductID" InsertVisible="False" ReadOnly="True" SortExpression="ProductID" Visible="False" />

<asp:BoundField DataField="Name" HeaderText="Nombre del Articulo" SortExpression="Name" />

<asp:BoundField DataField="ProductNumber" HeaderText="Codigo" SortExpression="ProductNumber" />

<!—ejemplo 2 -->

<asp:TemplateField HeaderText="Nivel Optimo" SortExpression="SafetyStockLevel">

<ItemTemplate>

<asp:TextBox

ID="safetelyStockLevel"

runat="server"

Text='<%# Bind("SafetyStockLevel", "{0}") %>'

Width="40px"

CssClass="control-textbox">

</asp:TextBox>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField HeaderText="Punto de Reorden" SortExpression="ReorderPoint">

<ItemTemplate>

<asp:TextBox

ID="reorderLevel"

runat="server"

Text='<%# Bind("ReorderPoint", "{0}") %>'

Width="40px"

CssClass="control-textbox">

</asp:TextBox>

</ItemTemplate>

</asp:TemplateField>

</Columns>

<HeaderStyle CssClass="control-gridview-header" />

<RowStyle CssClass="control-gridview-item" />

<AlternatingRowStyle CssClass="control-gridview-alternate" />

</asp:GridView>

</ContentTemplate>

</atlas:UpdatePanel>

Cuando el usuario da clic sobre el botón “Actualizar” se ejecuta un código que recorre cada elemento del control GridView y manda ejecutar el comportamiento de actualización de nuestro control no visual “SqlDataSource” el cual tiene declarado tres parámetros necesarios para ejecutar la actualización del registro. Si recordamos nuestras declaraciones “<Trigger>” del control UpdatePanel especificamos que precisamente el evento “Click” del control “Button1” disparara la llamada causando que el siguiente código se ejecute asincrónicamente vía XmlHttp.

protected void Button1_Click(object sender, EventArgs e)

{

for (int i = 0; i < GridView1.Rows.Count; i++)

{

GridViewRow row = GridView1.RowsIdea;

productsDataSource.UpdateParameters[0].DefaultValue = ((TextBox)row.Cells[0].FindControl("safetelyStockLevel")).Text;

productsDataSource.UpdateParameters[1].DefaultValue = ((TextBox)row.Cells[0].FindControl("reorderLevel")).Text;

productsDataSource.UpdateParameters[2].DefaultValue = GridView1.DataKeysIdea.Value.ToString();

productsDataSource.Update();

}

}

<asp:SqlDataSource

ID="productsDataSource"

runat="server"

ConnectionString="<%$ ConnectionStrings:AdventureWorksCnn %>"

SelectCommand="SELECT ProductID, Name, ProductNumber, SafetyStockLevel, ReorderPoint FROM Production.Product WHERE (ProductSubcategoryID = @subcategory)"

UpdateCommand="UPDATE Production.Product SET SafetyStockLevel = @safety, ReorderPoint = @reorder WHERE (ProductID = @productID)">

<UpdateParameters>

<asp:Parameter Name="safety" />

<asp:Parameter Name="reorder" />

<asp:Parameter Name="productID" />

</UpdateParameters>

<SelectParameters>

<asp:ControlParameter ControlID="DropDownList1" Name="subcategory" PropertyName="SelectedValue" />

</SelectParameters>

</asp:SqlDataSource>

ejemplopractico02.jpg  

Esperando te sea útil este pequeño ejemplo te dejo proyecto y el código fuente para que lo descargues. Asegúrate de contar con una instancia local de SQL Server 2005 o Express Edition que contenga la base de datos AdventureWorks.

Descargas

Suerte!!

Posted by haaron | 4 comment(s)
Filed under: , ,

Bases del control UpdatePanel de Atlas

Cuando una página ASP.NET ejecuta una llamada al servidor (postback) sucede una pequeña pausa seguida de un refrescado de toda la pagina sobre el navegador dibujando el nuevo contenido que es regresado en la petición. Durante esta pausa, el usuario definitivamente no puede interactuar con la aplicación y en ocasiones cuando la aplicación tiene que acceder a recursos del lado de servidor o la conexión está muy lenta resulta incomodo y tardío el cargar la información haciendo que la experiencia de usuario no sea del todo interactiva.

Una de las maneras que AJAX (Asynchronous JavaScript and XML) se diferencia de las aplicaciones web clásicas es el cómo se comunica con el servidor. AJAX utiliza código del lado del cliente (Client Script) para actualizar porciones de una página en vez de tener que hacer todo un postback. Esta técnica ofrece fluidez, responsividad y mejora la experiencia del usuario.

En el mundo de ASP.NET 2.0 contamos con Atlas, la implementación de AJAX sobre Visual Studio 2005 ofreciéndonos una serie de conceptos y controles que entienden y manejan el mismo principio de AJAX. Por supuesto que Microsoft siempre buscando mejorar la productividad de los programadores nos ofrece una serie de controles de servidor que con solamente configúralos podemos integrar en nuestras aplicaciones comportamientos y conceptos AJAX.

El control “UpdatePanel” de Atlas simplifica dramáticamente el uso del concepto AJAX en nuestras aplicaciones ASP.NET 2.0 abstrayendo la interacción entre el navegador y el servidor, restringiendo actualizaciones y refrescados de porciones particulares de nuestra página.

Asumiendo que cuentas con Atlas instalado vamos a crear una nueva aplicación de tipo “Atlas” Web Site que tenga un control SqlDataSource configurado para seleccionar registros de una tabla de cualquier base de datos y asegúrate de vincular en un control GridView el SqlDataSource para que muestre la información.

Para poder tener un comportamiento AJAX para cada evento de nuestro control GridView, lo primero que debemos integrar a nuestra página es una declaración que siempre debemos declarar. Siempre que utilicemos controles atlas en nuestras páginas tendremos que hacer la siguiente declaración.

<atlas:ScriptManager ID="ScriptManager1" EnablePartialRendering="true" runat="server" />

Una recomendación es que si utilices paginas maestros convendría hacer esta declaración allá.

Con solamente rodear a nuestra declaración del control GridView con el control UpdatePanel de Atlas tendremos un comportamiento AJAX para cada evento de nuestro GridView.

<atlas:UpdatePanel ID="UpdatePanel1" runat="server">

<ContentTemplate>

<asp:GridView

ID="GridView1"

runat="server"

AllowPaging="True"

AllowSorting="True"

DataKeyNames="IDCountry"

DataSourceID="SqlDataSource1">

</asp:GridView>

</ContentTemplate>

</atlas:UpdatePanel>

Tan solo cinco líneas de código nos ha costado habilitar un comportamiento AJAX para los eventos de un GridView.

Posted by haaron | 7 comment(s)
Filed under: , ,

Bases del control UpdateProgress de Atlas

Cuando utilizamos atlas para habilitar un comportamiento AJAX con la finalidad de mejorar la experiencia de usuario, la comunicación con el servidor se hace a través de XmlHttp el cual no infiere con el navegador en absoluto para mostrar alguna notificación o icono que notifique el comportamiento de la pagina. El uso de notificaciones que describan lo que esta sucediendo cuando existe algún tipo de tardanza a la hora de que Atlas este estableciendo una comunicación con el servidor para cargar datos y actualizar una porción de la pagina es un aspecto que también debemos de cuidar para que cuando el servidor tarde en responder y no lo haga instantáneamente el usuario final no piense que su acción no se efectuo.

El control “UpgradeProgress” de Atlas ofrece la posibilidad de mostrar una especie de indicador de progreso en nuestras páginas ASP.NET 2.0. Este control no está visible en la pagina cuando es cargada por primera vez en el navegador, pero para cuando se haga cualquier invocación asincrónica muestra automáticamente su contenido hasta que se reciba una respuesta del servidor o se cancele la petición.

Entonces, continuando con el mismo código del post sobre UpdatePanel que utilizamos anteriormente, veamos como configurar un control UpgradeProgress para nuestro UpdatePanel.

<atlas:UpdatePanel ID="UpdatePanel1" runat="server">

<ContentTemplate>

<asp:GridView

ID="GridView1"

runat="server"

AllowPaging="True"

AllowSorting="True"

DataSourceID="SqlDataSource1">

</asp:GridView>

<atlas:UpdateProgress ID="UpdateProgress1" runat="server">

<ProgressTemplate>

<b>Cargando datos...</b>

</ProgressTemplate>

</atlas:UpdateProgress>

</ContentTemplate>

</atlas:UpdatePanel>

Con esta declaración tendremos un comportamiento interesante. Cuando en nuestro control GridView seleccionemos el ordenado de una columna en particular dando clic sobre el link de la columna, en ese momento se dispara una operación asincrónica al servidor para cargar los datos ordenados y justamente mientras eso sucede se presenta justo debajo de nuestro GridView una leyenda que dice “Cargando datos…”. Cabe mencionar que dentro de nuestra sección “<ProgressTemplate>” podemos escribir cualquier tipo de código HTML que muestra una mejor interface, iconos o imágenes.

updateprogress01.jpg 

Posted by haaron | with no comments
Filed under: , ,

Web Part en ASP.NET 2.0

Veamos cómo podemos configure una aplicación web ASP.NET     2.0 para que soporte el uso de Web Parts. Los Web Parts proveen de un mecanismo muy sencillo para construir sitios web de manera modular y que se puedan personalizar dinámicamente, incluso al gusto del usuario final ofreciéndole una mejor experiencia. Imagina la idea de que el usuario final decida como desea que se le presente la información de una página, en qué orden y en qué posición los elementos de la misma serán acomodados y presentados. Este concepto es muy común en portales como Windows SharePoint Services y cada vez mas es adoptado en las aplicaciones de hoy en día como por ejemplo los Espacios de MSN o Windows Live que soportan este tipo de comportamiento.

En este pequeño post veremos como con la tecnología para el desarrollo web ASP.NET 2.0 podemos configurar rápidamente algunos componentes del .NET Framework 2.0 que nos permiten habilitar y programar Web Parts en nuestros formularios web.

Los sitios que soportan este concepto de personalización y de modularidad deben de permitir al usuario final la posibilidad de mostrar la pagina en distintos modos:

  • En el modo normal (Normal Mode) el Web Part Framework muestra la página en un estado normal sin la posibilidad alguna de edición o manipulación.
  • En el modo de edición (Edit Mode) el Web Part Framework permite al usuario seleccionar una sección en particular de la pagina para su completa edición como los títulos o colores del Web Part.
  • En el modo de diseno (Design Mode) el Web Part Framework permite a los usuario finales re ajustar el orden de los componentes modulares de la pagina.
  • En el modo catalogo (Catalog Mode) el Web Part Framework despliega una lista de secciones disponibles (Web PAts) que se pueden integrar a la página.

El primer concepto que debemos conocer para habilitar esta funcionalidad es el de zonas. Las zonas son las divisiones de una página susceptibles a mostrar o trabajar con web parts. Estas zonas las podemos declarar dentro de cualquier elemento HTML, normalmente utilizamos tablas para crear el esqueleto donde colocaremos nuestros web parts. Para que las zonas y web parts funcionen correctamente contamos con un control no visual llamado WebPartManager el cual administra los estados de las zonas y su contenido basado en un contexto de usuario. Este control tiene la capacidad de agregar o eliminar los elementos contenidos en cualquiera de las zonas y además la facultad de comunicar o pasar datos entre webparts con otros web parts de otra zona. Podemos declararlo en nuestro pagina aspx o podemos arrastrarlo del cuadro de herramientas de Visual Studio 2005.

<asp:WebPartManager ID="WebPartManager1" runat="server">

</asp:WebPartManager>

Un consejo valioso es que si estas utilizando Master Pages te recomiendo que mejor hagas esta declaración sobre la pagina maestra para replicar esta declaración en todos los formularios de la aplicación y en cualquier momento usar el comportamiento modular.

Antes de continuar con la declaración de las zonas, vamos a crear una tabla como la que se muestra a continuación:

<div style="text-align: center">

<table border="0" cellpadding="5" cellspacing="5" style="width: 800px; height: 400px">

<tr>

<td style="width: 100px">

</td>

<td style="width: 11px">

</td>

<td style="width: 100px">

</td>

</tr>

</table>

</div>

El siguiente paso es declarar nuestras zonas dentro de cada celda de la tabla creada. Utilizando el control WebPartZone de la caja de herramientas de Visual Studio 2005 podemos arrástralo a cada una de las celdas de nuestra tabla. Cabe mencionar que dentro de la zona es donde por fin podremos especificar aquellos controles que estamos acostumbrados a utilizar para programar nuestra aplicación. Tenemos que especificar dentro de nuestra control WebPartZone una sección llamada <ZoneTemplate> que será nuestra plantilla HTML donde podremos colocar los controles de nuestra página. En mi caso utilizare unos controles de usuario creados por mí. Están sencillo solamente muestra información en un control GridView.

Primero agregamos nuestras dos zonas quedando de la siguiente manera:

<table border="0" cellpadding="5" cellspacing="5" style="width: 800px; height: 400px">

<tr>

<td style="width: 100px; text-align: left;">

<asp:WebPartZone ID="WebPartZone1" runat="server" Height="400px" Width="390px">

<ZoneTemplate>

<uc1:EmployeeList ID="EmployeeList1" runat="server" />

</ZoneTemplate>

</asp:WebPartZone>

</td>

<td style="width: 11px">

</td>

<td style="width: 100px; text-align: left;">

<asp:WebPartZone ID="WebPartZone2" runat="server" Height="400px" Width="390px">

<ZoneTemplate>

<asp:Calendar ID="Calendar1" runat="server" Height="275px" Width="380px"></asp:Calendar>

</ZoneTemplate>

</asp:WebPartZone>

</td>

</tr>

</table>

Y para finalizar, tenemos que especificar algún mecanismo que nos permita a nuestra pagina cambiar de estado y podamos mover nuestros web parts de zona a zona. Para lograrlo simplemente vamos a agregar un control DropDownList fuera de las zonas y escribimos el siguiente código, no olvidemos seleccionar la propiedad AutoPostBack = True:

protected void Page_Load(object sender, EventArgs e)

{

if (!Page.IsPostBack)

{

foreach (WebPartDisplayMode mode in this.WebPartManager1.SupportedDisplayModes)

{

string modeName = mode.Name;

this.DropDownList1.Items.Add(new ListItem(modeName, modeName));

}

}

}

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)

{

WebPartDisplayMode displayMode = this.WebPartManager1.SupportedDisplayModes[this.DropDownList1.SelectedValue.ToString()];

WebPartManager1.DisplayMode = displayMode;

}

Con este código simplemente se muestran los modos disponibles para nuestra página en una lista desplegable. Al seleccionar el modelo de diseño “Desing” nuestra página mostrará las zonas disponibles y permitirá mover de lugar cada uno de nuestros web parts.

WebParts05.jpg     

Posted by haaron | 7 comment(s)
Filed under:

Collation Problem of the DataTierGenerator is easy to solve!

I just want to say thanks to this guy because he found a solution I just was trying to do. When you are using the DataTierGenerator for Enterprise Library 2.0 and try to connect to a SQL database that has a Collation different to “Latin1_General_CI_AS” it just can’t work. The reason is because the function “FN_LISTEXTENDEDPROPERTY” force the use of “Latin1_General_CI_AS”. To solve this problem we need to just specify the collation in our Schema queries.

If you try to read this post you will find where exactly.

Posted by haaron | with no comments