viernes, 03 de febrero de 2012
En caso de necesitar realitzar búsquedas contra el motor de base de datos sin tener en consideración mayúsculas/minusculas, acentos y otros símbolos de puntuación, desde SQL Server es necesario que la base de datos use una intercalación *_CI_AI
Pero aunque la base de datos esté bien configurada para que las consultas sean no sensitivas a este tipo de carácteres, si se realiza la consulta desde nuestra aplicación la consulta no será efectiva puesto que desde linq no se explota la facilidad que nos ofrece la base de datos.
Para solucionar esto hay un método que es el que muestro en el siguiente código:
string ntext = new string("TEXTO_A_BUSCAR".Normalize(NormalizationForm.FormD).Where(c => c < 128).ToArray());
Lista = Lista.Where(x => (UTF8Encoding.UTF8.GetString(UTF8Encoding.GetEncoding("ISO-8859-8").GetBytes(x.CAMPO_BD)).IndexOf(ntext, StringComparison.InvariantCultureIgnoreCase) > -1)).ToList();
En la primera instrucción normalizamos el texto a localizar en la base de datos, y en la segunda se realiza la búsqueda en sí misma sobre el campo de la base de datos con el cual deseamos hacer el filtro.
Espero que os sirva de ayuda.
jueves, 15 de septiembre de 2011
Así és! La beta 3 de este framework, basado en jQuery y con el objetivo de facilitar el desarrollo de interfaces de usuario web amigables para dispositivos móviles, ha sido lanzada.
Jquery Mobile soporta multitud de dispositivos (iOS, Android, Blackberry, etc.), pudiendo diseñar aplicaciones web que son compatibles con todos ellos. La ventaja respecto al diseño de aplicaciones nativas a cada plataforma es evidente. Diseñar nativamente a cada plataforma requiere multiplicar el esfuerzo de desarrollo y disponer de los conocimientos necesarios para cada una de ellas. Com jQuery Mobile podemos desarrollar aplicaciones web en PHP o ASP.NET o cualquier otro lenguaje, navegables desde cualquier dispositivo móvil y con una interfaz agradable, similar a la de iOS.
Todavía es beta 3 pero nos da muy buenas sensaciones. Hasta ahora disponíamos de otros frameworks de desarrollo web para dispositivos móviles pero no resultaban del todo completos. jQuery Mobile dispone de un amplio conjunto de elementos de UI y el sopore propio de jQuery, imprescindible hoy en dia para muchos de nosotros.
lunes, 09 de mayo de 2011
Desde principios de este año la archiconocida herramienta de inspección y desensamblado para ensamblados de .NET se debe pagar. Reflector ha dejado de ser una herramienta gratuita por lo que la comunidad rápidamente ha empezado a buscar alternativas. Si no quereis pagar los $35 que pide Redgate por .NET Reflector, la mejor alternativa que existe es ILSpy. Se trata de una herramienta de características muy similares a Reflector y que seguro se hará popular en poco tiempo.

martes, 26 de octubre de 2010
Trabajando en un buscador me encontré con un problema:
En cada registro del resultado de la búsqueda había un icono que me permetía abrir un report en PDF. Ahora bien, si se cambiaban los datos que debía mostrar, cuando volvía a abrirlo el PDF no me mostraba dichos cambios.
Si cerraba la ventana y la volvía a abrir sí me mostraba la información correcta, por tanto, empecé a pensar que era alguna cosa como que el report se estaba almacenando de alguna forma en caché.
Descubrí que cuando abres el report, si le pasas como parámetro &rs:ClearSession=true, borra dicha caché y se muestra el report actualizado.
Aquí os dejo un enlace muy interesante sobre los distintos parámetros que le puedes pasar a un report (llamándolo por url): http://www.compute-rs.com/es/consejos-176858.htm
jueves, 23 de septiembre de 2010
Si alguna vez estáis en el desarrollo de un proyecto, y mientras estáis diseñando una página os aparece de buenas a primeras el error: << 'child' is not a child of this parent >>, y no os deja acceder al diseño del fórmulario lo que deberíais hacer es acceder al "Designer" del formulario y dentro del procedimiento InitializeComponent() localizar la definición del formulario y añadir una línea por cada control existente en el formulario que tenga la siguiente estructura:
this.Controls.Add(this.myControlName);
Con esta sencilla instrucción para cada uno de los controles existentes solventaréis el error y podréis seguir trabajando con el formulario que se había corrompido.
jueves, 16 de septiembre de 2010
El caso con el que me encontré es el siguiente:
Tenía una lista de SharePoint y el identificador de un elemento de dicha lista. Lo único que quería era encontrar un elemento en concreto mediante este identificador.
Mi código era el siguiente:
oList = oWeb.Lists ("ListaDeSharePoint")
oItem = oList.Items.GetItemById (idElemento)
Bien, descubrí que NUNCA se debe usar esa construcción para acceder al elemento concreto, sinó que se debe implementar de la siguiente forma:
oList = oWeb.Lists ("ListaDeSharePoint")
oItem = oList.GetItemById (idElemento)
Si se utiliza la primera opción, que es la incorrecta, se crea un objeto SPQuery para leer todos los elementos de la lista y luego el GetItemById() ejecuta un bucle, en busca del elemento con el identificador que buscamos.
En cambio, si se ejecuta la segunda opción, recordemos que es la correcta, se crea un objeto SPQuery para leer solamente un objeto cuyo identificador es el que le pasamos.
viernes, 27 de agosto de 2010
Os dejo a mano un método para la generación de un RSS haciendo uso de las herramientas que facilita Linq para la generación de XML's trabajando contra un EntityModel.
using System;
using System.Xml;
using System.Xml.Linq;
using System.Linq;
public XDocument getXmlData()
{
using (EntitiesDefinition ent = new EntitiesDefinition())
{
XDocument xml = new XDocument(new XDeclaration("1.0", "UTF-8", "yes"),
new XElement("rss", new XAttribute("version", "2.0"),
new XElement("channel",
new XElement("title", "TITULO"),
from tabla in ent.GetInfo()
orderby tabla.Fecha descending
select
new XElement("item",
new XElement("title", tabla.Campo1 + " " + tabla.Campo2),
new XElement("pubDate", tabla.Fecha),
new XElement("description", tabla.Descripcion)
)
)));
return xml;
}
}
Esta función devolvería un xml(formato RSS) que ya puede ser interpretado de forma correcta por los navegadores.
En caso de necesidad de más información sobre el formato RSS 2.0 o ver todos los tags disponibles, dejo aquí una página sobre la especificación de RSS 2.0.
Espero os sirva de ayuda.
viernes, 13 de agosto de 2010
Si alguna vez intentáis aplicar el DatePicker de JQuery a un control que a su vez tenga asociado un validador de .NET (por ejemplo, un sencillo RequiredFieldValidator) os podéis encontrar con que cuando seleccionáis un día del calendario desplegable os sale el siguiente error:

Y os salta el debugger de javascript en la siguiente línia:

Mi código no podía ser más simple:
<asp:TextBox ID="txtFechaInicio" runat="server" Width="80px" Font-Size="11px"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvIni" runat="server" Text="*" ErrorMessage="Fecha inicial obligatoria" ControlToValidate="txtFechaInicio" ValidationGroup="SaveMaquinaria"></asp:RequiredFieldValidator>
<script type="text/javascript">
$(function() { $("#txtFechaInicio").datepicker(); });
</script>
Bien, la solución está en pasarle a la función datepicker() una función onselect, es decir:
<script type="text/javascript">
$(function() {
$("#txtFechaInicio").datepicker({
onSelect: function(dateText) {
document.all ?
$(this).get(0).fireEvent("onchange")
: $(this).change();
}
});
});
</script>
miércoles, 11 de agosto de 2010
En algún momento nos podemos encontrar en la necesidad de tener diversas sesiones sobre una misma aplicación, y lo habitual viene siendo desconectarse de una sesión para conectarse con la otra.
Ahora bien si podemos trabajar sobre firefox existe una extensión Cookie Pie, con la cual permite tner activadas diversas sesiones dentro del mismo servicio web.
Descárgala de
www.nektra.com/products/cookiepie-tab-firefox-extension y, una vez esté instalada, accede al servicio web deseado y abre una pestaña en blanco. Haz clic sobre ella con el botón derecho del ratón, escogiendo la opción
Toggle On/Off CoockiePie (junto a la pestaña aparecerá el icono ) y ya es posible validarse con otro usuario.
viernes, 09 de julio de 2010
En caso de que estemos desarrollando una aplicación web, y tengamos en uso un TreeView, puede ser que nos interese modificar el color de los nodos del árbol en algún momento.
En entorno Windows es tan sencillo como modificar la propiedad ForeColor del TreeNode, pero en caso de entorno web esta propiedad tan útil y directa no está disponible con lo cual nuestra opción se basa en modificar la propiedad Text del TreeNode, así pues lo tratamos como si fuera HTML básico y realizamos la siguiente acción:
TreeNode.Text = "<font color = green>" + TreeNode.Text + "</font>";
Con esta acción se consigue que el nodo aparezca del color indicado en este caso 'verde', pero esta acción provoca un efecto colateral visual que no es deseable, y es que en el botón 'CollapsedExpanded' que es el que nos permite contraer y expander los nodos aparece un ToolTip de forma automática que muestra la información del TreeNode.Text, es decir, "<font color = green>TreeNode.Text</font>", para evitar este efecto colateral tendremos que modificar propiedades del TreeView, así pues en la definición del TreeView pondremos:
ExpandImageUrl=""
CollapsedImageUrl=""
ExpandImageToolTip=""
CollapsedImageToolTip=""
Espero os sirva de ayuda.
Siguiente >>