JASoft.org

Un par de consejos sencillos sobre controles enlazados y DataGrid

Un par de consejos sencillos sobre controles enlazados y DataGrid
Sólo un par de detallitos simples que a veces pueden resultar útiles. 1.- Normalmente los controles DataGrid de ASP.NET (u otros similares enlazados) los generas usando el diálogo especial que tiene Visual Studio. En éste defines las columnas que va a llevar y las características de éstas. Si por ejemplo defines una columna plantilla que, de entrada, no está enlazada con ningún campo de un origen de datos, Visual Studio utiliza comillas dobles para asignar los valores propiedades. Si luego retocamos la plantilla manualmente e incluimos código en ella lo más probable es que obtengamos un error. Ello se debe a que, al tener comillas en el exterior como delimitadores, en cuanto incluyamos también comillas dentro de la expresión (para una cadena, por ejemplo) el intérpreto de tiempo de ejecución identifica mal los límites del atributo, produciendo un error.Solución: cambia los delimitadores externos del atributo a comillas simples ('). El intérprete las usa correctamente y se acabó el p... [Más]

¿El evento ItemCreated se ejecuta dos veces?

¿El evento ItemCreated se ejecuta dos veces?
Pues sí. Esta situación es algo que despista bastante si no se tiene controlado (y uno se da cuenta, claro). En los DataGrid de WebForms en ASP.NET el evento ItemCreated se puede ejecutar dos veces a partir de la primera carga de la página. Esto se debe a que cuando hacemos un PostBack a la página (es decir, pulsamos un botón o hacemos algo que genera un evento en el servidor) los contenidos de la rejilla de datos se regeneran a partir del ViewState de la página y por lo tanto se lanza el evento para cada fila. Si además volvemos a enlazar la rejilla para responder a una ordenación o paginación, ésta se vuelve a generar y por lo tanto se lanza de nuevo el evento ItemCreated. Si usamos el evento ItemDataBound esto no ocurre ya que los contenidos la primera vez se regeneran desde el ViewState y por lo tanto no hay enlace de datos. En este caso el evento sólo se lanza una vez: al realizar el verdadero enlace. Conclusión: si usas el evento ItemCreated ten en cuenta que, dependiendo de c... [Más]

El misterio del Control DataGrid de ASP.NET y los eventos desaparecidos

El misterio del Control DataGrid de ASP.NET y los eventos desaparecidos
A ver, esta es peliaguda... La situación es la siguiente: colocas un DataGrid en un formulario Web (o peor aún, lo copias y lo pegas desde otro formulario) y luego escribes con todo el cariño manejadores de eventos para, por ejemplo, ordenar columnas, paginar o responder a botones de acción (evento ItemCommand) confiando en que todo irá perfectamente. Después de un buen rato de crear columnas, botones y código lo vas a probar y... ¡nada! parece que no está cogiendo los manejadores de los eventos y por lo tanto no hace ni caso a ciertas acciones. Te puedes desesperar tratando de ponerlo a funcionar. No hay manera. ¿A qué se debe esto? Bueno pues la solución es sencilla aunque a ver quien es el listo que la intuye a la primera. Seguro que realizas el enlace del DataGrid dentro del evento Load de la página ¿verdad?. Tu código será similar al siguiente: private void Page_Load(object sender, System.EventArgs e){    //algunas comprobaciones, conexiones, etc...   Datagrid.DataBind();} ... [Más]

Compresión de páginas ASP y ASPX

Compresión de páginas ASP y ASPX
Cuando estamos escasos de ancho de banda para una aplicación Web puede resultar beneficioso comprimir las peticiones que se hagan al servidor, de forma que los archivos estáticos (imágenes, HTML...) y las páginas se envíen a los usuarios ocupando mucho menos tamaño. En realidad en el caso de las imágenes no se ahorra demasiado ya que éstas son comprimidas por su propia naturaleza (todos los formatos de Internet, GIF, JPEG y PNG, incorporan ya compresión). Sin embargo si nos referimos a las páginas ASP y ASPX la compresión puede ayudar bastante puesto que al estar constituidas fundamentalmente por texto el grado de compresión que se alcanza es muy grande. Muchas páginas conocidas, como por ejemplo Google, utilizan la compresión de archivos para devolver sus resultados a los navegadores que soportan compresión (lo indican en las cabeceras que envían al servidor). Para habilit... [Más]

Ejecutar una aplicación restringiendo sus permisos de ejecución

Ejecutar una aplicación restringiendo sus permisos de ejecución
Hoy he leído este truco de Enrico Sabbadin en la página de .NET2TheMax y me ha parecido muy interesante... Se trata de ejecutar una aplicación (o parte de ella) dentro de un dominio restringido de forma que se ejecute con bajos privilegios de seguridad (lo que se suele llamar un patio de juegos o sandbox). Esto puede ser interesante en diversas situaciones. La técnica consiste, grosso modo, en crear un nuevo dominio de aplicaicón (AppDomain) y asignarle una política de seguridad que se carga desde un archivo en disco. Posteriormente se carga el ensamblado a ejecutar con bajo privilegio mediante una llamada a ExecuteAssembly. Interesante....

Validación de direcciones IP

Validación de direcciones IP
Para validar una dirección IP (del estilo xxx.xxx.xxx.xxx) introducida por un usuario disponemos de multitud de opciones: desde analizar la cadena separándola por los puntos hasta utilizar expresiones regulares. Sin embargo en .NET hay una forma muy fácil de conseguir lo mismo sin complicarnos la vida y es utilizar la clase IPAddress del espacio de nombres System.Net. Ésta posee un método Parse que aunque su objetivo es obtener una instancia de la clase a partir de una cadena que represente una IP, si bien la podemos utilizar indirectamente para simplemente validar este tipo de cadenas. De este modo una función que nos permite validar una IP contenida en una cadena de texto podría tener el siguiente aspecto:  private static bool ValidaIP(string sIP) {  try  {   IPAddress ip = IPAddress.Parse(sIP);  }  catch  {   return false;  }  return true; } Ésta devuelve un booleano indicando si la IP es válida. Así de sencillo y sin necesidad de implementar análisis de cadenas o escribir una e... [Más]

Microsoft presenta su iniciativa "Desarrolla con MSDN"

Microsoft presenta su iniciativa "Desarrolla con MSDN"
Microsoft ha presentado su nuevo programa de apoyo a los desarrolladores de software españoles, con el fin de reafirmar su compromiso con la tecnología .NET. El plan destinará durante los próximos 10 meses 2 millones de euros para ofrecer a esta comunidad de forma gratuita la formación necesaria para conocer los últimos avances en la tecnología .NET de Microsoft, haciendo especial hincapié en su utilización en proyectos reales. La comunidad española de desarrolladores en tecnologías de Microsoft es una de las más activas del mundo y abarca a más de 30.000 profesionales del sector que participan de forma asidua en las actividades que ofrece la compañía. Éstas se desarrollan en el sitio Web MSDN, que cuenta con información para desarrolladores y recibe un millón de visitas mensuales; en una gira de eventos y talleres que se llevan a cabo en diversas ciudades españolas y que atrae cada año a 6.000 asistentes. Asimismo, Microsoft organiza en Internet conferencias online, seminarios, chats... [Más]

Traductor de código en C# a Visual Basic .NET

Traductor de código en C# a Visual Basic .NET
Esta estupenda utilidad en-línea de Alex Lowe puede resultar muy útil a muchos programadores. Se trata de un traductor que convierte de forma automática código escrito en C# a código VB.NET. No hace falta instalar nada para usarlo, sólo hay que conectarse a Internet, pegar el código en C# en un área de texto y pulsar un botón. ¡Ya está!. Como bien pone el autor en su página, la traducción no es perfecta. Eso sí, el resultado es muy bueno. Yo lo he probado traduciendo código bastante largo y complejo en C#. Aunque el resultado en VB no compilaba a la primera, no se trataba de nada que no se pudiera arreglar con un buen Option Strict Off y cuatro ajustes manuales. Sólo traduce código C# puro (no admite etiquetas HTML por el medio si copiamos de una aplicación Web). Dan Wahlin ha escrito una interfaz para poder usar la herramienta a través de un servicio Web. En la propia página hay un enlace a esta información. Puedes encontrarlo en la Web de ASPAlliance.

Cómo obtener los nombres de una enumeración

Cómo obtener los nombres de una enumeración
En muchos programas se suelen dar a los usuarios una serie de opciones para que escoja. Por ejemplo un tipo de búsqueda a realizar, un rango de posibles valores para parametrizar algún comportamiento, etc... Lo más habitual es que estas opciones se "mapeen" después a elementos de una enumeración en el código de la capa de negocio. De esta forma si definimos una enumeración similar a esta: public enum EstadoCivil{  Casado,  Soltero,  Divorciado,  Viudo,  Religioso,} lo más común será que en la interfaz de usuario exista un modo de seleccionar algún valor equivalente, por ejemplo a través de una lista desplegable o un conjunto de botones de radio. Es bastante común generar los elementos de la interfaz manualmente, añadiendo opciones a una lista Web, por ejemplo, con código similar a este: lista.Items.Add(new ListItem("Casado", "0");lista.Items.Add(new ListItem("Soltero", "1");etc... Sin embargo sería muy útil poder añadir automáticamente los valores de una enumeración cualquier... [Más]

Cómo averiguar si una ventana ha sido cerrada por el usuario

Cómo averiguar si una ventana ha sido cerrada por el usuario
Las ventanas de Windows (formularios Windows Forms) se pueden cerrar bien por parte del usuario, bien mediante programa con el método Close(). Pero ¿cómo distinguir ambos casos? En Visual Basic 6 era muy fácil hacerlo dentro del evento QueryUnload gracias al parámetro UnloadMode. Sin embargo en .NET no es tan sencillo averiguarlo. Hoy nos ha surgido la necesidad en un trabajo y lo cierto es que no tenía ni idea ya que suelo trabajar más con WebForms, que no se cierran ;-) Aunque no es tan flexible como el evento QueryUnload mencionado esta solución hace el trabajo. Se trata de subclasificar el procedimiento de la ventana (mira mi post sobre Subclasificación de ventanas en .NET) y verificar que el mensaje que se está produciendo es WM_SYSCOMMAND con el parámetro SC_CLOSE, así: public const int SC_CLOSE = 0xF060; public const int WM_SYSCOMMAND = 0x0112;  protected override void WndProc(ref System.Windows.Forms.Message m) {       if(m.Msg == WM_SYSCOMMAND && (int)m.WParam ==... [Más]

Este soy yo y este es mi blog técnico, dedicado al software y a la programación.

¡Sígueme en Twitter!

Mis otros blogs

- JM Alarcón @ campusMVP.es
Contenido técnico en español orientado a desarrolladores
- JMAlarcon.es
Blog personal no técnico: sociedad, innovación, empresa...

Krasis

- campusMVP.es:
Los mejores cursos online de programación en español

- SELF LMS:
La plataforma de elearning más potente del mercado.

Histórico