April 2008 - Posts
Pues eso, que he cometido un pecado imperdonable. Me he comprado un Apple, por dios, ni siquiera soy capaz de poner el link típico cuando se nombra una empresa.
Me explico esperando el perdón. Hace meses me han asignado un
cargo nuevo en mi empresa y la verdad es que no paro quieto en el mismo
sitio mucho tiempo, además, se me han multiplicado los viajes de forma
considerable. No, no me quejo de mi nuevo cargo, solo constato que
llegó un punto en que odiaba mi anterior portátil, solo, debido a su peso, 2,4Kg.
Pues nada, hace un par de meses me puse a buscar un portátil
alternativo. Mi objetivo era encontrar, sobre todo , portabilidad, era
mi primera exigencia. Como comprenderán, cuando uno viaja este tema es
muy importante, por lo menos para mí. Mis viajes no tienen que ver con
presentaciones de proyectos de software, sistemas, bases de datos, etc.
Mis viajes son fundamentalmente para ir a reuniones o presentaciones en
las que, como máximo, uso powerpoint, word o excel. Por lo tanto
buscaba un ordenador donde se pudiera ejecutar ofimática y poco más.
Insisto, mi primer objetivo era portabilidad.
Esto coincidió con la salida al mercado del nuevo Apple MacBook Air.
Al principio, ni caso, no se me pasaba por la cabeza pasarme a Leopard
o complicarme la vida. Pero he aquí que un día voy a unos grandes
almacenes al que había ido acompañando a mi mujer, y claro, siempre se
hace uno el loco y termina en el departamento de informática. Aquí me
topé con Apple, pues a curiosearlos. Cuando le toca el turno al Air, me
quedé realmente sorprendido, por un momento se me pasó por la cabeza
que era lo más portable que había encontrado, pero claro,
enseguida mis neuronas se pusieron a buscarle fallos, sólo trae un
puerto USB, ¿y yo para qué quiero más?. Pero no trae DVD, ¿y yo para
qué quiero DVD en mis reuniones?. Solo trae 80Gb de disco, mis
documentos no superan los 10Gb. Solo pesa 1Kg, no, esto no es
discutbile, etc. etc. etc.
Otro problema, claro, comprarte un Apple para usar windows .....,
pues no sé yo que decirte. Al final me lo he comprado, he comprado una
licencia de Parallales,
es un virtualizador como VMWare o Virtual Pc pero con bastante más
experiencia que estos en el mundo mac, he probado todos y realmente se
mueve mejor el primero. Te permite trabajar con los dos sistemas al
unísono, abrir ficheros en cualquiera de los sistemas, arrastrar y
soltar de un sistema a otro, etc. Muy bien este virtualizador.
Pues nada más, he pedido perdón, espero recibirlo y solo les dejo unas fotos del apartito.

PD: De paso me he puesto a probar Windows Live FolderShare.
Está en versión beta y sirve para sincronizar x ordenadores desde la
red. Esto es sincronizar, no es un depósito de ficheros como puede ser Windows Live SkyDrive. Está muy curioso.
Veremos en este post cómo usar la API de
Google Chart. Esta API es muy sencilla de usar, simplemente hay que construir una url que contenga una sintaxis correcta, esta url nos devuelve una imagen que podemos recorger y mostrarla en un control image.
Pero lo vamos a complicar un poco, vamos a mostrar un gráfico de tarta pero recogiendo los valores de una fila de un GridView. Para ello utilizaremos un código que ya mostré en
otro post y que nos permite elegir una fila simplemente haciendo click sobre ella.
El resultado de la estadística lo mostraremos en un ModalPopUpExtender al que además le añadiremos un DragPanel para que nos permita mover la estadística. El resultado será como este:

Como ya dije, no voy a explicar cómo seleccionar la row para mostrar la estadística, eso aquí, el grid está basado en una tabla de la base de datos de prueba que nos proporciona Microsoft, Adventureworks, la pueden bajar aquí.
El código no es nada complejo, después de elegir la fila, componemos la url válida de google chart, la almacenaremos en un label que no se ve en la página, tiene un css que la oculta:
<asp:Label ID="url" Text="Vacio" runat="server" CssClass="hide"></asp:Label>
Y en el evento SelectedIndexChanged del GridView rellenamos esta label, tal que:
Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged
' COMPONE URL GOOGLE CHART
Dim _Max As Double = (Math.Max(Math.Max(Convert.ToDouble(Me.GridView1.SelectedRow.Cells(2).Text), Convert.ToDouble(Me.GridView1.SelectedRow.Cells(3).Text)), Convert.ToDouble(Me.GridView1.SelectedRow.Cells(4).Text)))
Dim _Min As Double = (Math.Min(Math.Min(Convert.ToDouble(Me.GridView1.SelectedRow.Cells(2).Text), Convert.ToDouble(Me.GridView1.SelectedRow.Cells(3).Text)), Convert.ToDouble(Me.GridView1.SelectedRow.Cells(4).Text)))
Me.url.Text = "http://chart.apis.google.com/chart?chs=350x100&chd=t:" & Format(Int(Me.GridView1.SelectedRow.Cells(2).Text), "#") & "," & Format(Int(Me.GridView1.SelectedRow.Cells(3).Text), "#") & "," & Format(Int(Me.GridView1.SelectedRow.Cells(4).Text), "#") & "&cht=p3&chl=" & Me.GridView1.SelectedRow.Cells(2).Text & "|" & Me.GridView1.SelectedRow.Cells(3).Text & "|" & Me.GridView1.SelectedRow.Cells(4).Text & "&chds=0," & Format(Int(_Max), "#")
End Sub
Este código compone la url, en concreto, el gráfico de tarta, entre otras cosas hay que pasarle los valores mínimos y máximos para que se dibuje de forma correcta. De ahí que se utilice Math.Max y Math.Min para ello.
La imagen con la estadística la he colocado dentro de un ModalPopUpExtender, a este se le ha aplicado estilos para que se muestre de forma atractiva. Estos estilos lo pueden ver si se bajan el código del proyecto al final del post.
El javascript que llama el link de "Ver Imagen" es el siguiente:
<script type="text/javascript">
function getChart(){
// RECODIFICA URL GOOGLE.
var _url = document.getElementById("url").innerHTML;
_url= _url.replace(/&/g,"&");
// COMPRUEBA SI SE HA ELEGIDO ROW
if (_url != 'Vacio')
{
document.getElementById('GoogleChart').src = _url;
document.getElementById('GoogleChart').style.visibility="visible";
}
else
{
document.getElementById('GoogleChart').style.visibility="hidden";
}
return false;
}
</script>
¿Qué hace este script? Lo primero es cambiar el & por el encoding correcto que exige Google Chart, &, para ello se utiliza la función replace. A continuación comprueba que se ha elegido una fila en el GridView, si esto no se hubiera hecho, la label que hemos usado para rellenar la url tendría un valor de "Vacio", si esto es así, lo que se hace es ocultar la imagen para que no se vea mal. Si se ha elegido una row entonces la muestra.
En cuanto al DragPanel del ModalPopUpExtender es muy sencillo, usamos el control DragPanelExtender del ToolKit de Ajax, ahora bien hay que realizar un truco y es incluir dentro del panel al que queremos dragear otro panel que sirva de contenedor, tal que así:
<ajaxcontroltoolkit:ModalPopupExtender ID="mdlPopupExtender" runat="server" TargetControlID="MuestraChart" PopupControlID="mdlpopup"
CancelControlID="BtnCerrar" BackgroundCssClass="modalBackground" RepositionMode="None" BehaviorID="mdlpop" >
</ajaxcontroltoolkit:ModalPopupExtender>
<ajaxcontroltoolkit:DragPanelExtender ID="DragPanelExtender1" runat="server" TargetControlID="mdlpopup" DragHandleID="panele">
</ajaxcontroltoolkit:DragPanelExtender>
<asp:linkbutton ID="MuestraChart" runat="server" Text="Ver Imagen" OnClientClick="return getChart();">
</asp:linkbutton>
<asp:panel CssClass="containermdl" ID="mdlpopup" runat="server" style="display:none">
<asp:panel ID="panele" runat="server">
<div class="headermdl">
Prueba Google Chart</div>
<div class="bodymdl">
<img src="" alt="Sample chart" id="GoogleChart" style="visibility:hidden" runat="server" />
</div>
<div class="footermdl">
<asp:Button ID="BtnCerrar" CssClass="closemdl" runat="server" />
</div>
</asp:panel>
</asp:panel>
Y ahora el DragPanelExtender apuntará a "panele" como DragHandleId y a "mdlpopup" como TargetControlId.
Por supuesto, para utilizar otro tipo de gráfico, simplemente habrá que cambiar el código asociado al evento SelectedIndexChanged del GridView.
Creo no haberme olvidado nada. Saludos
Bajar fuente.
La verdad es que este hotfix ya había salido en inglés hace algunas
semanas. No lo había publicado hasta ahora por este hecho. Como ya lo
han sacado en castellano aquí va el link desde donde se puede descargar.
Resuelve lo siguiente:
HTML Source view performance
- Source
editor freezes for a few seconds when typing in a page with a custom
control that has more than two levels of sub-properties.
- “View Code” right-click context menu command takes a long time to appear with web application projects.
- Visual Studio has very slow behavior when opening large HTML documents.
- Visual Studio has responsiveness issues when working with big HTML files with certain markup.
- The Tab/Shift-Tab (Indent/Un-indent) operation is slow with large HTML selections.
Design view performance
- Slow typing in design view with certain page markup configurations.
HTML editing
- Quotes are not inserted after Class or CssClass attribute even when the option is enabled.
- Visual Studio crashes when ServiceReference element points back to the current web page.
JavaScript editing
- When opening a JavaScript file, colorization of the client script is sometimes delayed several seconds.
- JavaScript Intellisense does not work if an empty string property is encountered before the current line of editing.
Web Site build performance
- Build is very slow when Bin folder contains large number of assemblies and .refresh files with web-site projects.
Información más detallada aquí.
He pensado publicar algunos de los post que tengo en mi otro blog y que han resultado interesantes a los visitantes del mismo. Este versa sobre cómo aplicar estilos al GridView. Copio y pego.
Este post, más que demostrar qué se puede hacer con un gridview,
demuestra qué cosas, entre otras, se puede hacer con hojas de estilo.
Les muestro el mismo gridview, es decir, sin cambiar código en el
asp o en el codebehind, distintas formas de visualizar un gridview. El
único código que tiene la página es el que permite cambiar al vuelo la
hoja de estilo. Como esto ya lo expliqué en otro post,
no me voy a repetir. También contiene código para elegir el número de
filas a mostrar por página del gridview e ir a una página concreta, esto también lo expliqué en su día.
Me he inspirado en algún tema ya existente, por ejemplo, el azul es el estilo por defecto de ExtJs, el marrón es de Matt Berseth, los otros son de inspiración propia, lo que demuestra que mi profesionalidad en diseño es bastante pobre.
Da igual, la cosa es demostrar como se puede cambiar la apariencia
de un control, o cualquier cosa, simplemente jugando con estilos.




El código fuente aquí.