20 diciembre 2006

Vista Preeliminar con C#

En ciertas ocasiones nuestro programa debe enviar por impresora información ya sea de una base de datos o de algun documento plano, pero entonces nos topamos con los diseñadores de reportes (cristal report) por llamarlo asi, pero que sucede cuando no lo tenemos a la mano, pues aqui planteo una forma interesante de enviar un archivo XML a vista preeliminar y claro desde aqui ya podemos imprimir, que es lo que se necesita:

Con este pequeño codigo es mas que suficiente

using System.Xml; //Con esto trataremos los objetos para XML
using System.Xml.Xsl;

Ahora el codigo de la función

XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("s.xsl"); //Archivo con el que le daremos forma a nuestro archivo XML

//Aqui le aplicamos la transformación y lo guardamos como archivo HTML
xslt.Transform("Miarchivo.xml", "informe.html");

//Con un control webBrowser (disponible en el framework .NET 2.x ) insertado en nuestro form
//Cargamos el archivo HTML creado

web.Navigate(new Uri(Environment.CurrentDirectory + "file://informe.html/"));

//Ahora solo llamamos al metodo PrintPreviewDialog y listo

web.ShowPrintPreviewDialog();

Figura(1) Este es el control a insertar


Figgura(2) Asi es como saldria nuestra ventana con vista preeliminar


14 diciembre 2006

¿Y la educacion?

Con gran desconcierto escuchaba la noticia del recorte al presupuesto para la educación superior en México, y me pregunto, pensaran que le estaban dando mucho?, o por que el recorte?, estas cosas son las que me molestan, terminamos el año con el cambio de presidente despues de varios meses en disputas pos-electorales, despues la burla del gobierno austero y ahora el recorte, y para acabarla no tengo nada en mente para escribir en el blog y me pongo a escribir estas patrañas... me despido y que tengan un buen dia.

13 diciembre 2006

C# y xml

En dias pasados instale el visual c# express de Microsoft (nadie es perfecto jejeje), y para empezar me programe un directorio telefonico pero utilizando XML para almacenar los contactos y en realidad me agrado, aunque el codigo no esta muy optimizado en cierta forma es funcional, de momento aqui les dejo el pantallazo y el codigo, espero no sea muy criticado el hecho de haber abordado esto con Mono, pero recuerdo que solo es un ejemplo de prueba con Visual C# express, aunque no se ha perdido la esencia ya que seguimos utilizando C#.



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;



namespace WindowsApplication1
{
public partial class frmppal : Form
{
DataSet archivoXML;
DataGrid Grid;
public frmppal()
{
InitializeComponent();
}



private void frmppal_Load(object sender, EventArgs e)
{
Grid = new DataGrid();
Grid.Name = "Grid";
Grid.Size = new Size(200, 150);
Grid.Location = new Point(0, 50);
Grid.Dock = DockStyle.Fill;
pgrid.Controls.Add(Grid);



//crear un objeto para estilos en el Datagrid
DataGridTableStyle estilo = new DataGridTableStyle();
estilo.MappingName = "CONTACTO";
estilo.BackColor = Color.LightGray;
estilo.AlternatingBackColor = Color.LightSteelBlue;
estilo.ForeColor = Color.Black;
estilo.LinkColor = Color.Black;

//Crear objetos del tipo DataGridTextBoxColumn
//para cada columna de la tabla del Datagrid
DataGridTextBoxColumn columna = new DataGridTextBoxColumn();



//Configurar cada columna
//Esta es la primera columna
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Nombre del contacto";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "NOMBRE";
columna.Width = 280;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estilo.GridColumnStyles.Add(columna);
//Direccion
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Direccion";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "DIRECCION";
columna.Width = 190;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estilo.GridColumnStyles.Add(columna);



//CARGO
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Cargo";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "CARGO";
columna.Width = 190;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estilo.GridColumnStyles.Add(columna);



//GRUPO
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Grupo";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "GRUPO";
columna.Width = 190;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estilo.GridColumnStyles.Add(columna);



//LETRA
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Letra";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "LETRA";
columna.Width = 50;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estilo.GridColumnStyles.Add(columna);
//FAX
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Fax";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "FAX";
columna.Width = 90;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estilo.GridColumnStyles.Add(columna);
//EMAIL
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Correo Electronico";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "EMAIL";
columna.Width = 190;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estilo.GridColumnStyles.Add(columna);



//crear un objeto para estilos en el Datagrid
DataGridTableStyle estiloTelefono = new DataGridTableStyle();
estiloTelefono.MappingName = "TELEFONO";
estiloTelefono.BackColor = Color.Beige;
estiloTelefono.AlternatingBackColor = Color.AliceBlue;



//NUMERO
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Numero Telefonico";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "NUMERO";
columna.Width = 300;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estiloTelefono.GridColumnStyles.Add(columna);
//TIPO
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Tipo de Telefono";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "TIPO";
columna.Width = 180;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estiloTelefono.GridColumnStyles.Add(columna);
//ANOTACION
columna = new DataGridTextBoxColumn();
//columna.TextBox.MaxLength = 50;
columna.Alignment = HorizontalAlignment.Left;
columna.HeaderText = "Acerca del Telefono";
//columna del Dataset enlazada con esta columna del Datagrid
columna.MappingName = "DESCRIBE";
columna.Width = 220;
//texto que se muestra cuando la columna tiene valor null
columna.NullText = "";
//añadir la columna a los estilos del Datagrid
estiloTelefono.GridColumnStyles.Add(columna);



Grid.TableStyles.Add(estilo);
Grid.TableStyles.Add(estiloTelefono);
}



private void salirToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}



private void abrirToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog fo = new OpenFileDialog();
fo.InitialDirectory = Environment.CurrentDirectory + "\\";
fo.Filter = "xml Archivos (*.xml)*.xml";
fo.RestoreDirectory = true;
if (fo.ShowDialog() == DialogResult.OK)
{
if (fo.OpenFile() != null)
{
archivoXML = new DataSet();
archivoXML.ReadXml(fo.FileName);
Grid.CaptionText = fo.FileName;
Grid.SetDataBinding(archivoXML, "CONTACTO");
//Grid.Update();
}
}
}



private void guardarToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
//escribir el DataSet al archivo XML
archivoXML.WriteXml(Grid.CaptionText);
archivoXML.Clear();
archivoXML.ReadXml(Grid.CaptionText);
MessageBox.Show("Datos Guardados", "Aviso al usuario", MessageBoxButtons.OK);
}
catch(Exception pollo)
{
MessageBox.Show("Error","Aviso al usuario", MessageBoxButtons.OK);
}



}



private void acercaDeDirectorioToolStripMenuItem_Click(object sender, EventArgs e)
{
frmacerce frmacerca = new frmacerce();
frmacerca.ShowDialog();
}
}
}


Cualquier comentario es bienvenido, si desean todos los archivos del proyecto, dejen su comentario y se los hare llegar.