martes, 13 de diciembre de 2011

Asp.Net: Recuperar un valor de una celda del GridView

Una forma de recuperar un valor de una celda en el control GridView: 
Protected Sub GridView1_RowDataBound(ByVal sender As Object, _
    ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) _
    Handles GridView1.RowDataBound

    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim precio As Single
        precio = DataBinder.Eval(e.Row.DataItem, "precio")
        If precio > 5 Then
            e.Row.ForeColor = System.Drawing.Color.Red
            e.Row.BackColor = System.Drawing.Color.Yellow
            e.Row.Font.Bold = True
        End If
    End If

End Sub

domingo, 22 de mayo de 2011

WCF: Temario para el examen de certificación 70-513 WCF de Microsoft

A continuación pongo el enlace oficial con todos los temas que hay que estudiar para el Examen de WCF con Microsoft .Net Framework 4.0. (70-513) (¡Rayos!, hubiera comenzado buscando esto primero, jeje!)

El link es: WCF Framework 4.0

Otro enlace: http://www.jamesjfoster.com/blog/2010/resource-links-for-70-513-wcf-certification-exam/

sábado, 14 de mayo de 2011

WCF: Cómo detectar la IP del cliente.

El código de ejemplo sería así:

OperationContext context = OperationContext.Current;
MessageProperties messageProperties = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpointProperty = messageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;

return string.Format("IP: {1}, Puerto: {2}", endpointProperty.Address, endpointProperty.Port);

Silverlight: Cómo se usa el archivo de configuración de Silverlight

Silverlight Web Config

Linq: Convertir un resultado de LINQ a un DataTable

¿Cómo convertir un resultado de LINQ a un DataTable? La respuesta la tenemos en /www.c-sharpcorner.com

Silverlight: DataGrid y más

- Ejemplos del control DaraGrid

viernes, 25 de marzo de 2011

IIS: Nueva versión de IIS 7.5 Express para desarrolladores.

Qué bueno, Microsoft pode a disposición de los desarrolladores una nueva versión llamada IIS 7.5 Express. Según Microsoft mejora el desarrollo y las pruebas que se pueden hacer para las aplicaciones web, es una versión más liviana como la que existe en Visual Studio llamada ASP.NET Development Server (Cassini) pero con la ventaja de que posee casi las mismas características que un IIS en un servidor de producción como el que encontramos en Windows Server 2008, y eso es bueno, porque siempre que se instala en producción se comienzan a ver errores en el sitio web desarrollado y con éste IIS Express podremos descubrirlos y depurarlos más rápido.

Otras ventajas aparte de que podremos testear mejor las aplicaciones, es que no se ocupan derechos de administrador, soporta SSL, URL Rewrite y contiene todos los módulos de IIS 7.X que se han ido agregando, es compatible desde Windows XP con SP 3 y versiones de SO superiores. Y además también sirve para PHP.

IIS 7.5 Express viene incluido en WebMatrix, que es una nueva herramienta de desarrollo de Microsoft la cual trae base de datos, IIS, ASP.Net, PHP, y un motón de cosas más y lo bueno es que es gratis y compatible con varios proyectos web Open Source como Drupal, Joomla, DotNetNuke, etc.

Para hacerlo compatible con Visual Studio 2010, les puedo decir que es un dolor de ???? porque no hay un buen instalador todavía, pero aquí me encontré una buena descripción: Instalar IIS Express para Visual Studio 2010. Recordar que hay que instalar el SP1 de Visual Studio 2010 el cual tiene nada más y nada menos que 1.5 GB, que poquito verdad!.

domingo, 20 de marzo de 2011

Silverlight: El objeto de silverlight crece pero no aparece el scrollbar

En una página web normal, cuando el contenido interno que está en un elemento DIV crece ya sea porque agregamos contenido de texto o porque aparece un control u otros elementos adicionales, generalmente aparece al lado derecho una barra de desplazamiento para poder observar el contenido que no se puede ver.

Pues resulta que en silverlight no existe el elemento DIV, lo que existe en silverlight y que son equivalentes a los DIV son: Grid, StackPanel, DockPanel, Canvas, ScrollViewer, etc. Esos controles tienen la capacidad de crecer conforme crece su contenido interno. El problema aparece cuando el contenedor principal crece pero el objeto DIV que contiene al objeto de silverlight no crece de ninguna manera. Uno esperaría que aparezca una barra de desplazamiento en el lado derecho de la pantalla, sin embargo, la página no crece en altura.

Existen dos soluciones una aplicando javascript y otra usando el control ScrollViewer.

Usando Javascript:

Los pasos para resolver el problema de la altura de la página son los siguientes:

1º Al control Grid que es por así decir el contenedor principal que generalmente lo tenemos por defecto en la página MainPage.xaml, tenemos que agregarle el evento LayoutUpdated para que se dispare cada vez que el contenido interno crece en altura. Por más mínimo que sea el cambio de altura o inclusive de anchura de un control interno, ese evento se va a disparar.



2º El segundo paso es agregar una línea de código el cual debe ejecutar el evento LayoutUpdatedcada vez que cambie las dimensiones de un control interno:




 3º Finalmente, hay que poner la función de javascript en la página que contiene al objeto de silverlight:




Noten que la función getElementId de javascript devuelve la referencia del elemento de silverlight que previamente se le asignó el nombre "silverlightControlHost".

Cada vez que se dispare el evento LayoutUpdated, éste invoca a una función de javascript la cual se encarga de cambiar la altura del control DIV que contiene al objeto OBJECT que hace referencia al control del silverlight.

Usando el control ScrollViewer:

Más fácil, y menos dolores de cabeza. Si usted llegó a mi blog buscando una solución para la altura en silverlight, está salvado, jeje!.

Lo primero es lo primero, hay que limpiar el código que tenemos en la página xaml. Principalmente la altura del control contenedor más externo se podría reemplazar por MinHeight (solo si fuera necesario). En mi caso, yo quite todos los Height, Width, VerticalAlignment, HorizontalAlignment y dejo los que son estrictamente necesarios de los cuales puse MinHeight y lugar de Height.

El siguiente paso es utilizar el control ScrollViewer. Lo que se debe hacer es colocarlo como el control más externo y lo más importante es ponerle las propiedades VerticalAlignment y HorizontalAlignment con el valor Strech para que se extiendan en toda la página. Adicionalmente usando CSS, hay que poner al 100% el ancho y alto del DIV que contiene al objeto de silverlight y también ponérselo al mismo objeto de silverlight.

Una buena ayuda en el foro de silverlight

lunes, 7 de marzo de 2011

ASP.Net: Network Service Account

Interesante documento que explica todo lo relacionado con la cuenta "Network Service Account" o mejor dicho "NT AUTHORITY\Network Service". Clic aquí para leer éste interesante explicación.

Una breve explicación sería la siguiente:

NT Authority es una cuenta de usuario que actúa como agente de seguridad para  Windows. No es una cuenta de usuario como la que se utiliza para ingresar a Windows, es más bien una cuenta de seguridad utilizada para llevar a cabo tareas a nivel de sistema operativo tales como tareas programadas sin la necesidad o intervención de usuarios físicos.

Por ejemplo, el programa SVCHOST.EXE es el programa que corre todos los servicios de Windows y utiliza la cuenta del sistema (NT Authority) para correr esos servicios internamente.  Dicha cuenta de Windows se conoce también como "Host Process For Windows Services" o "Services Host Program".

lunes, 28 de febrero de 2011

ADO .Net: Extraño error de mapeo.

Tremendo rato me tuvo entretenido un error con ADO.Net (para no decir otra cosa más fea, jaja) , que impedía hacer un Insert en una tabla. El mensaje del error era el siguiente:

No mapping exists from object type Metkas.Productos to a known managed provider native type.

Al final, me di cuenta que el paso de parámetros estaba mal. Para el valor de una parámetro yo puse la palabra reservada "this". Por ejemplo: new SqlParameter("@MiParametro", this).

Al tener this como valor para el parámetro @MiParametro, genera el error antes mencionado. Diay si!, fue un error al digitar, porque no terminé la línea de código.

miércoles, 23 de febrero de 2011

Transact - SQL: Borrar todas las tablas de una base de datos en SQL Server

Una forma rápida para borrar todas las tablas de una base de datos es con el siguiente comando:

EXEC sp_MSforeachtable @command1 = "DROP TABLE ?"

Alternativamente para poder borrar todos los Procedimiento almacenados podemos aplicar el siguiente código:

declare @procName sysname

declare someCursor cursor for
    select name from sysobjects where type = 'P' and objectproperty(id, 'IsMSShipped') = 0

open someCursor
fetch next from someCursor into @procName
while @@FETCH_STATUS = 0
begin
    exec('drop proc ' + @procName)
    fetch next from someCursor into @procName
end

close someCursor
deallocate someCursor
go

domingo, 20 de febrero de 2011

WCF: The remote server returned an error: NotFound.

Infinidad de ocasiones me ha aparecido el error: The remote server returned an error: NotFound.

Caso #1:
Y no siempre, la solución es la misma para ese tipo de error. Si a alguien puedo ayudar con ésta entrada, les cuento que casi siempre es porque le estamos pasando un parámetro de un tipo X a un WCF, y el WCF está devolviendo un tipo igual al parámetro de entrada, con la excepción de que el parámetro de entrada estaba por así decirlo "extendido"; es decir, era una clase hija que heredaba de la clase padre, entonces, podemos cometer el error de devolver la clase extendida, sin embargo se suponía que el método solo retornaba el tipo de la clase padre (la clase normal y no la extendida).

No sé si me expliqué bien, pero bueno, lo dejo para acordarme como fue que solucioné mi error en C# y los WCF, jajajajaja!.

Caso #2:
De nuevo el errorcito, ésta vez era porque en el subproyecto donde tenía todos los WCF, se les estaba poniendo el sufijo WCF al final del nombre y al hacer la referencia en el proyecto de Silverlight, también estaba poniendo el mismo sufijo WCF. El detalle del por qué un WCF me estaba presentando ese error, era porque en el proyecto donde tenía todos los WCF, específicamente para el WCF que me daba el error, no le había puesto el sufijo, pero cuando hice la referencia si le puse el sufijo. Internamente la dirección "Address" estaba bien colocada, pero algún colega, le agregó el sufijo provocando el error. Bueno, por lo menos descubrí otra forma de como hacer que los WCF fallen, jaja!.

Silverlight: Subir archivos al servidor.

Un link sobre cómo subir archivos al sevidor utilizando un indicador de progreso.

sábado, 12 de febrero de 2011

.Net 3.0: ¿Vale la pena usar la palabra reservada var?

Ya hace tiempo cuando estuve trabajando con LINQ en una de las empresas que estuve, mi jefe me explicó las ventajas de usar la palabra reservada "var", que aunque no es algo así como muy milagroso, si vale la pena mencionar sus ventajas, muy pocas ventajas, pero que si me parecen muy interesantes!.

Como todos bien saben, o si no lo sabían, en .Net todas las variables deben ser fuertemente tipificadas; es decir, tenemos que especificar de qué tipo será la variable, por ejemplo: int, short, long, un tipo definido por el usuario, etc.

Ahora bien, con la entrada de la versión de .Net 3.0 aparece la palabra reservada "var" con la cual podemos declarar variables en forma implícita; esto significa que no es necesario que especifiquemos el tipo de la variable, dejando ese trabajo al compilador.

Muchos programadores pensarían que eso es una "mala práctica de programación" porque estamos forzando más trabajo para el compilador y que el producto final que se instala en producción no será eficiente, etc.

Si siguen leyendo está entrada se darán cuenta que NO ES CIERTO tal afirmación, usar var es algo normal, jaja!.

1º) Originalmente "var" se creó para utilizarlo con los tipos anónimos, que hablando de temas de LINQ se hace muy claro la existencia de "var".

2º) var se puede utilizar en cualquier código que queramos hacer, con las siguientes excepciones:

a)- Al declarar una variable implícita, siempre debemos asignarle un valor; es decir, no podemos poner:

var resultado;

Lo anterior no funciona porque el compilador no va a poder definir de que tipo debe ser la variable.

b) var, solo se puede usar dentro de métodos de una clase.

c) No es posible retonar un tipo var y los parámetros tampoco pueden ser var; es decir, si queremos definir una función tal como:

public var Cuadrado(var base){
      return base*base;
}

Lo anterior no funciona!


Ahora, las ventajas:

1º) No tenemos que estar escribiendo el tipo de la variable y ni siquiera el namespace reduciendo la línea de código en gran medida.:

     var resultado = gridDatos.ItemsSource as List<Productos>;

En el ejemplo anterior se usa la clase List genérica con el tipo Productos, donde Productos es una clase definida por el usuario. La línea de código anterior sin usar var quedaría así:

ObservableCollection<Productos> resultado = gridDatos.ItemsSource as ObservableCollection<Productos>;

Notar como se está especificando en el ejemplo anterior, el tipo en ambos lados, lo cual es entendible pero innecesario, en lo personal, ahora que conozco la existencia de var.

Ahora consideren cuando el programador gusta poner el nombre de namespace completo (sin usar alias), la línea de código quedaría extremadamente larga. Además por si no lo sabían, el optimizador del compilador quita los namespace largos y los combierte en alias o simplemente los quita y deja solo el nombre del tipo exacto sin especificar todas las partes del namespace.

2º) Como mencioné anteriormente, muchos programadores piensan que usar var no es eficiente para el producto final que entregamos al cliente; está afirmación es falsa, porque el compilador se encarga de inferir los tipos de datos donde existe var generando un ensamblado en donde reemplaza las palabras var por el tipo que se le está asignando a la variable. Es decir, los ensamblados generados son iguales si nosotros declaramos explícitamente o implícitamente las variables.

Veamos éste sencillo ejemplo donde se declara una variable usando var.



Ahora vean el código des-ensamblado, donde se observa que el compilador dedujo el tipo de datos, en éste caso es int.




Igualmente en el código MSIL (Microsoft Intermediate Language) tenemos que el tipo de datos para la variable "i" es int:



Por cierto en Visual Basic .Net, el equivalente de var es la palabra reservada Dim, por ejemplo: Dim miVariable = 5 * 5.

Referencia:

El excelente libro que leí hace mucho tiempo: LINQ IN ACTION de Fabrice Marguerie, Steve Eichert y Jim Wooley.

martes, 25 de enero de 2011

WCF: Problemas con WCF?

Me estaba apareciendo el siguiente error y luego de una hora para variar y después de googlear un rato, la solución era ni más ni menos que actualizar la referencia del WCF en el proyecto. (En el directorio Services References seleccionar el WCF que se está trabajando, luego sacar el menú contextual de ese archivo y seleccionar Update Service References).

A continuación el error que aparecía (encontré cientos de soluciones pero ninguna funcionó, hasta que se me ocurrió actualizar la referencia del WCF, jajajaja):
The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter. Expecting state Element Encountered Text with name '', namespace ''.'. Please see InnerException for more details.


martes, 4 de enero de 2011

SQL SERVER: Cantidad de días en un mes

La siguiente consulta devuelve la cantidad de días que tiene un mes de acuerdo al número de mes que le pasemos como parámetro:

declare @mes int
set @mes = 2
select day(dateadd(day,-1,left(convert(varchar(8),dateadd(month,@mes,getdate()),112),6)+'01'))