JASoft.org

AJAX con ASP.NET 2.0 (The "a pelo" series): Script Callbacks (II): La interfaz ICallbackEventHandler

AJAX con ASP.NET 2.0 (The "a pelo" series): Script Callbacks (II): La interfaz ICallbackEventHandler
Bueno, en el anterior post, ya hemos visto que para poder hacer uso de la característica de Callback nativa de ASP.NET 2.0 sólo hay que implementar la interfaz ICallbackEventHandler. Ésta sólo tiene dos miembros: Método RaiseCallbackEvent: Es llamado automáticamente cuando se produce un Callback al servidor mediante Script. Se le pasa como parámetro una cadena que se genera en el lado de cliente (en el navegador) antes del envío. Enseguida veremos la manera de hacerlo. Dentro de este método hacemos el procesamiento que necesitemos, por ejemplo, recibimos un identificador y vamos a una base de datos para obtener los datos de detalle de una entidad asociada. Cualquier cosa. Su definición es la siguiente: void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument) Método GetCallbackResult: este es el método que se llama automáticamente para devolver los resultados al cliente. Dichos resultados se devuelven en forma de cadena (es el tipo devuelto por el método) y se pas... [Más]

AJAX con ASP.NET 2.0 (The "a pelo" series): Script Callbacks (I)

AJAX con ASP.NET 2.0 (The "a pelo" series): Script Callbacks (I)
Seguro que recuerdas que no hace mucho estuve haciendo en el blog una serie sobre AJAX (1, 2, 3, 4, 5, 6 y 7) "super-a-pelo", es decir, usando sólo JavaScipt y tu imaginación, nada de Atlas y compañía. La verdad es que tuvo bastante éxito y muchas visitas, referencias, trackbacks, etc... Viendo que el tema suscita interés voy a continuarlo un poco pero esta vez haciéndolo con una nueva característica que es nativa a ASP.NET 2.0 y que se denomina Script Callbacks. Esto facilita bastante el trabajo con AJAX respecto a hacerlo todo uno mismo, pero aún así sigue siendo más complicado que usar una biblioteca estilo AJAX.NET o la propia Atlas de Microsoft que ahora está en beta. Por este motivo y dado que sigue siendo una técnica algo rupestre denominaré a esta nueva serie como AJAX con .NET: The "a pelo" series ;-) Bueno, veamos primero un poquito de teoría y en los siguientes post pasaremos ya a la práctica de esta técnica nativa de .NET a la que podremos sacar bastante partido... [Más]

Reproducir MP3, vídeo y otros tipos de archivos con .NET

Reproducir MP3, vídeo y otros tipos de archivos con .NET
En mis dos anteriores post comentaba la manera de reproducri archivos de sonido del sistema con .NET, tanto en la versión 1.x como en la 2.0. En el último un visitante preguntaba cómo podemos reproducir MP3 desde .NET. La solución más sencilla es la de toda la vida: recurrir a la API de MCI para hacerlo. MCI es el acrónimo de Media Control Interface. se trata de una API basada en comandos de texto que permite controlar los diferentes dispositivos multimedia de reproducción y grabación que hay en el sistema. Gracias a MCI podemos reproducir vídeo, audio, CDs, MIDI, etc.. . así como grabar desde micrófonos, cámaras y demás, todo ello de forma estándar e independiente del dispositivo real que haya detrás. La única función importante de MCI que nos interesa para nuestro ejemplo de reproducción de MP3 es 'mciSendString'. Ésta permite enviar comandos MCI para abrir dispositivos y operar con ellos. Para reproducir un archivo MP3 (o realmente cualquier otro) sólo necesitamos conocer dos co... [Más]

Reproducir sonidos del sistema en nuestra aplicación .NET 1.x

Reproducir sonidos del sistema en nuestra aplicación .NET 1.x
Este post surge a raíz del anterior en el que explicaba como reproducir sonidos en .NET 2.0 (viene muy facilito), ya que un asiduo lector de este blog ha preguntado cómo se harí en versiones anteriores. La respuesta a esta pregunta es: ¡usando la API de Windows!. Los que llevamos unos cuantos años programando con tecnologías Microsoft (los dinosaurios que usábamos ActiveX y estas cosas) estamos todos muy acostumbrados a usar la API de windows y no nos suena raro. En .NEt se sigue usando para algunas cosas, pero la verdad es que está todo tan mascado que pocas veces suele hacer falta. En este caso la función clave de la API MessageBeep. Esta función permite reproducir sonidos predefinidos del sistema con sólo pasarle su código numérico. Por tanto lo único que necesitamos para replicar la funcionalidad de la clase que viene con .NET 2.0 es declarar esta función y conocer las constantes. así que una clase similar a la anterior sería la siguiente (código completo): using System;u... [Más]

Reproducir sonidos del sistema en nuestra aplicación .NET 2.0

Reproducir sonidos del sistema en nuestra aplicación .NET 2.0
Este es un truco rápido para la tarde del sábado (estoy un poco vago), pero que seguro que a más de uno le resulta útil... ¿Te gustaría que, por ejemplo, cuando muestres un cuadro de mensaje se oiga el sonido del sistema adecuado a la situación?. Por ejemplo, lanzas un mensaje de error y que suene el sonido que el usuario tenga configurado para los errores. En .NET 2.0 es algo realmente fácil gracias a la nueva clase SystemSounds del espacio de nombres System.Media. Podemos escribir: System.Media.SystemSounds.Asterisk.Play();MessageBox.Show("Error en la aplicación", "Se ha producido un error xxxxx, blah, blah", MessageBoxButtons.OK, MessageBoxIcon.Error); la primera línea hace que suene el sonido predeterminado de atención, consiguiendo un diálogo aún más realista. Los sonidos disponibles con esta clase son los siguientes: Asterisk, Beep, Exclamation, Hand y Question.

Creación de un control botón ASP.NET para regreso automático

Creación de un control botón ASP.NET para regreso automático
Una cuestión común en todas las aplicaciones Web es hacer que la navegación sea lo más sencilla posible para nuestros usuarios. Una situación muy habitual es la de reutilizar una página para varios propósitos de modo que a ésta se puede llegar por diversos sitios. Si colocamos un botón de "Cancelar" o "Volver" es frecuente que tengamos que escribir bastante código para asegurarnos que devolvemos al usuario al lugar del que vino teniendo en cuenta los diferentes "postbacks" producidos por los controles de la página. El siguiente control permite aislarnos de este tipo de cosas haciendo por debajo él todo el trabajo. Añade un nuevo control de usuario y llámale "Volver.ascx". Sobre su superficie coloca simplemente un botón con el nombre cmdVolver y asígnale el texto "Volver". En el archivo de código escribe lo siguiente (en C#, en VB sería más o menos igual): using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;usi... [Más]

Excepción con 'ARITHABORT' al insertar datos en una base de datos SQL Server

Excepción con 'ARITHABORT' al insertar datos en una base de datos SQL Server
Este error me pasó el otro día en una aplicación que estoy desarrollando para una empresa de logística y me pareció lo suficientemente interesante como para reseñarlo aquí. El caso es que tienes un código de actualización INSERT normal y corriente de acceso a datos, escrito directamente con código ADO.NET, a través de un procedimiento almacenado o incluso mediante el uso de un TableAdapter de un DataSet tipado (por debajo es ADO.NET normal). Cuando vas a actualziar cualquier registro, de repente, te salta el siguiente error: INSERT failed because the following SET options have incorrect settings: 'ARITHABORT' Bueno. Esta excepción es el resultado resultado directo de una particularidad de SQL Server. El caso es que si tenemos una tabla que está referenciada dentro de cualquier vista de la base de datos que sea una vista indexada, no es posible introducir nuevos registros en la tabla de la manera normal y directa. Lo típico que pasa (y de hecho fué lo que me pasó a mi): Creas va... [Más]

Otro bug de .NET que he descubierto: valores calculados en DataSet tipados.

Otro bug de .NET que he descubierto: valores calculados en DataSet tipados.
Este bug lo he descubierto hace poco y lo puse en su día en la página de Connect de Microsoft. El caso es que hasta la fecha nadie ha dicho "esta boca es mía", pero para mi se trata de un error claro. A continuación describo la situación así como la forma de salvarla con el menor esfuerzo...: Una aplicación Web (imagino que en una Windows pasaría lo mismo, pero no lo he comprobado). Creas un DataSet tipado con su correspondiente TableAdapter para realizar el acceso a datos. A los campos devueltos le añades manualmente uno nuevo (o varios) que serán campos calculados a partir de los otros (por ejemplo, asignándole una expresión del tipo "Apellidos + ',' + Nombre"). Ahora pruebas el TableAdapter con la opción de vista previa y verás que, en efecto, todo va bien y la nueva columna muestra el valor calculado que se supone que debería tener. De acuerdo... Ahora escribes código en tu aplicación que instancia el TableAdapter y llama a la versión 'Get' del método de acceso a datos (como sab... [Más]

Comportamiento extraño con el formato de fechas en los GridView

Comportamiento extraño con el formato de fechas en los GridView
Cuando estamos usando un GridView para mostrar datos obtenidos de una base de datos resulta muy cómodo usar el editor de columnas para definir cómo se deben mostrar los datos en el listado que se genera. Una propiedad muy interesante de las columnas enlazadas en DataFormatString, que nos permite decidir qué estilo queremos aplicar a las columnas. Sin embargo con los campos que contienen fechas pasa unacosa muy rara... Si tenemos un campo que es una Fecha y definimos una columna enlazada de modo similar a este: <asp:BoundField DataField="FechaFin" DataFormatString="{0:d}" HeaderText="Final"> esperaremos ver algo similar a lo siguiente en la columna: 13/7/2006. Sin embargo por más que cambiemos el formato veremos algo como esto: 13/7/2006 00:00:00 Es decir, no hace caso y mete el formato de fecha y hora cortas. Si queremos que una columna de tipo fecha haga caso al formato tenemos dos soluciones: 1.- Convertirla en una plantilla. Con esto funcionará sin problemas ... [Más]

Tipos anulables en .NET 2.0

Tipos anulables en .NET 2.0
Una interesante característica nueva que ofrece la versión 2.0 de la plataforma.NET es la de "Tipos anulables" o, en inglés, "Nullable types". Se trata de un tipo especial de dato que permite que los tipos base por valor se puedan comportar como valores por referencia nulos cuando sea necesario (repasa mi post sobre tipos por valor y por referencia). De este modo este nuevo tipo anulable permite representar valores concretos o la ausencia de valor. Por ejemplo, una variable de tipo 'int' siempre contiene un número entero. Aunque no le asignemos explícitamente nada, al ser un tipo base por valor siempre toma un valor por defecto, en este caso concreto un 0. Pero claro, un 0 no es lo mismo que decir 'esta variable no contiene valor alguno'. En el caso de las clases (tipos por referencia) la ausencia de "valor" se representa asignándole un nulo a la variable, pero en los tipos por valor esto no es posible. ¿No sería estupendo disponer de un híbrido entre estos dos comportamientos? Pu... [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