jueves, 13 de diciembre de 2012

Error: Sys.ArgumentNullException:value cannot be null,parameter name:panelsCreated[2]

Problemas con este mensaje "Sys.ArgumentNullException:value cannot be null,parameter name:panelsCreated[2]" a  la hora de publicar su aplicacion web en el IIS.

Solo basta con agregar a nuestro ScriptManager o ToolkitScriptManager según la versión de ajax que utilicen la propiedad ScriptMode = "Release" en vista diseño o en código en el Page_Load ScriptMode = Release;

y asunto arreglado.

Saludos cordiales!

miércoles, 14 de noviembre de 2012

Crear reporte con ItextSharp en C# sin tabla



Veremos como crear un reporte PDF con ITextSharp en C# sin el uso de tablas, esto dejara el texto lineal y abra que ir acomodándolo. Para ello necesitamos importar la librería de ItextSharp a nuestro proyecto, podemos descargarlo de la red o bien desde el mismo vs a partir de la versión 2010 con el administrador de paquetes NuGet y luego agregar la referencia con  using iTextSharp.text.

Primero empezamos declarando una variable de tipo document en el cual le agregamos el tamaño de nuestro documento en este caso es tipo carta, podemos elegir de otros tipos como A4, oficio, etc.
  Document doc = new Document(iTextSharp.text.PageSize.LETTER);

Definimos al autor y el tipo de palabras claves al igual que los margenes

  doc.AddAuthor("Gustavo Ortiz Gamez");
  doc.AddKeywords("pdf, PdfWriter; Documento; iTextSharp");
  doc.SetMargins(10.0f, 10.0f, 10.0f, 10f);

Aquí ocupamos una variable de tipo string con la ruta y nombde del archivo

  string rut = @"C:\doc.pdf";

Procedemos a crear el documento en la ruta antes establecida
  PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream(rut, FileMode.Create));
     
Abrimos el documento a ocupar
      doc.Open();

Y empezamos a escribir nuestro texto para lo cual declaramos una variable de tipo paragraph en la cual vamos a definir el formato de nuestro texto, como alignment para definir la justificacion, Font para el tipo y tamañao de letra, y con Add agregamos el texto que vamos a ocupar
Paragraph paragraph = new Paragraph();
      paragraph.Alignment = Element.ALIGN_RIGHT;
      paragraph.Font = FontFactory.GetFont("Arial", 9);
      paragraph.Add("Esto es una prueba);

Y solo basta con agregar esta variable paragraph a nuestro documento.
Para continuar agregando texto es necesario ir agregando nuevos paragraph
     
doc.Add(paragraph);

Limpianos nuestro paragraph por si queremos definir otro tipo de formato o tipo de letra 
paragraph.Clear();
      paragraph.Font = FontFactory.GetFont("Arial", 14, Font.BOLD);
      paragraph.Add("Prueba PDF");
      doc.Add(paragraph);
      paragraph.Clear();

Para agregar saltos de linea solo basta con agregar “\n” a nuestro documento
     doc.Add(new Paragraph("\n"));


Podemos agregar imágenes a nuestro documento con la siguiente instruccion
     iTextSharp.text.Image imgpfd = iTextSharp.text.Image.GetInstance(@"C:\images\imgprueba.jpg"); //Dirreccion a la imagen que se hace referencia
     imgpfd.SetAbsolutePosition(50, 50); //Posicion en el eje carteciano de X y Y
     imgpfd.ScaleAbsolute(200, 200);//Ancho y altura de la imagen
     doc.Add(imgpfd); // Agrega la imagen al documento



Una vez terminado de escribir nuestro documento procedemos a cerrar el documento con:
doc.Close();    
y con esto tendremos nuesotr documento en la ruta que definimos al principio     

Este es un pequeñop tip para poder abrir nuestro documento desde la pagina web donde nos dara la opcion de descargarlo

Response.Clear();
      Response.ClearContent();
      Response.ClearHeaders();
      Response.AddHeader("Content-Disposition", "attachment; filename=Nombrearchivo.pdf");
      Response.ContentType = "application/pdf";
      Response.TransmitFile(rut);
      Response.End();


Con esto terminamos este pequeño tutorial, la continuacion de este es como crear el reporte pero con una el uso de tablas, que a mi me a funcionado mejor que estar escribiendo el texto plano.

Cualquier duda o comentario estoy a sus ordenes.

Saludos cordiales!

jueves, 25 de octubre de 2012

Denegado el acceso al archivo del informe. Es posible que esté abierto en otro programa.

¿Les a parecido este mensaje  una vez publicado su proyecto web en el servidor IIS "Denegado el acceso al archivo del informe. Es posible que esté abierto en otro programa."?

     Para corregir este detalle necesitamos darlos los permisos de escritura sobre la carpeta Temp, que es donde se crea este archivo por default antes de mostrarse en nuestra pagina, y la carpeta se encuentra en C:\Windows\, solo basta con darle los permisos al usuario de IIS_IUSRS.

Saludos cordiales!

miércoles, 24 de octubre de 2012

Crear reporte con Sap Crystal Reports



El día de hoy les traigo la forma de crear un reporte con Sap Crystal Reports desde c#, que es una muy buena herramienta con los controles mejorados y muy vistosos. Pero vallamos al grano como siempre.
Desde nuestro Visual Studio en nuestro proyecto previamente creado, agregamos un nuevo archivo de tipo de datos, el cual será nuestro DataSet, el cual contendrá la estructura de nuestra tabla de BD que vamos a utilizar. Una vez abierto el diseñador agregamos una TablaAdapter con el clic derecho de nuestro mouse o desde el cuadro de herramientas (Imagen 1), una vez agregada la TablaAdapter, procedemos a configurar nuestra conexión a BD, o bien seleccionamos la que se esté utilizando en el proyecto.


Imagen 1.

viernes, 19 de octubre de 2012

Abrir un archivo (Excel, Word, PDF, Etc.) desde aspx


Les traigo otro código para asp.net, que es como poder abrir un archivo desde c# .net, básicamente es abrir, por que anteriormente con el IE6 lo mostraba en la misma pagina como la hace Google con cierto archivos, ahora en las nuevas versiones de IE7 en adelante  lo da como descarga de archivo.
Vamos a nuestro cometido.
Para poder realizar este proceso, es necesario contar con la ruta del archivo y las siguientes referencias a nuestro proyecto:

Abrir ventana emergente con javascript y ajax desde c#


     Anteriormente publique un articulo llamado Abrir popup con JavaScript donde se abre el popup utilizando javascript, con la función ya incrustada desde el lado del cliente. Existen otras formas de poder realizar esto, una es escribir el código directo en una variable y ejecutarlo con un response.write desde nuestra pagina aspx.cs o aspx.vb, dependiendo del lenguaje.
Pues bien ahora les traigo otra forma de lograrlo, dentro de una pagina que tiene controles Ajax, si han utilizado Ajax en sus paginas web, habrán notado que no se lleva muy bien con los scripts de javascript. Para ello existe una solución de realizar el cometido.
Una pagina que utiliza Ajax, necesita de un ScriptManager, esto nos impide ejecutar los códigos de Ajax, y si lo hacemos desde un response.write, se ejecuta la acción pero la pagina se desconfigura. Para ello existe la siguiente solución.
Dentro de la clase ScriptManager, viene un método llamado RegisterClientScriptBlock, con el cual podemos ejecutar nuestro window.open.
String Clientscript = "window.open(‘pagina.aspx')";
ScriptManager.RegisterClientScriptBlock(this, this.GetType(),"newWindow", Clientscript, true);


Como podrán darse cuenta si han ejecutado un response.write con la función de abrir una ventana lleva antes del window.open la instrucción de que es script
 <script type="text/javascript"><script>, en este caso ya no lo lleva, ya que se especifica en el RegisterClientScriptBlock que es una nueva ventana con el texto "newWindow".
Con este sencillo comando se ejecuta nuestro script y no habrá problema con la pagina de que se llegue a cuatrapear.

Otra forma de abrir una nueva ventana, sin necesidad de utilizar el response.write y la página no tiene Ajax es con el ClientScript

String Clientscript = "<script>window.open('pagina.aspx"')</script>";
Me.ClientScript.RegisterStartupScript(this.GetType(), "WOpen", Clientscript,  true);

Se podrán dar cuenta que es similar pero aquí se ejecuta dentro del cliente, y es el mismo efecto, no afecta para nada la pagina, como lo aria un response.write y la instrucción es diferente al abrir la ventana en vez de "newWindow" ahora es "WOpen"


Sin mas por el momento espero les halla sigo util, ya saben si tienen dudas o comentarios no duden en publicarlo.


Saludos cordiales!

jueves, 18 de octubre de 2012

Crear excel desde asp, web, c#

             Después de hace tiempo sin publicar nada, por fin me llego la inspiración, mentira jeje, eh tenido algo de trabajo, y  adquiriendo nuevos conocimientos de los cuales estoy gusto a compartir con ustedes, pues bien vamos al grano.

¿Se han topado con la necesidad de crear un Excel desde web? si es así, supongo que han probado con interop la vendita herramienta que nos da Microsoft, que si bien le e utilizado en varias ocasiones en aplicaciones de escritorio mas que nada, donde no existe ningún problema, pues bien al querer hacerlo nos topamos con muchos problemas de seguridad y configuración que no nos lo permiten, bueno a mi en lo personal eh tratado de echar a andar esa herramienta en un server 2008 sin éxito.

lunes, 16 de enero de 2012

Acceder a un control con JavaScript dentro de un ContentPlaceHolder

Uno de los problemas que enfrente a la hora de trabajar con paginas maestras, de querer validad un formulario dentro de un ContentPlaceHolder es obtener el Id del control.
como este ejemplo que normalmente ocupamos en nuestros códigos

document.getElementById("txtnombre").value

Probando varios ejemplo lo intente hacerlo con el código que aparece en html de nuestra caja de texto

ctl00_ContentPlacePaginaMaestra_txtnombre

Una de las opciones en javascript es acceder con este nombre directamente

document.getElementById('ctl00_ContentPlacePaginaMaestra_txtnombre').value

Aquí arriesgamos un poco nuestras validaciones ya que si cambiamos el nombre la pagina maestra afectaría nuestro código.

la manera mas sencilla es utilizando el Id de nuestro control con un ClientId para que nos lo reconosca

document.getElementById('<%=txtnombre.ClientID %>').value