jgcastle
Usuario (México)
Cualquier programador que utilice alguna vez Acces como base de datos tendrá problemas con las fechas; especialmente aquel que se encuentre con que la configuracion regional del equipo de desarrollo es diferente que la del equipo de producción. Con esto entedemos, por ejemplo una computadora que tiene el formato "dia/mes/año" y de repente se topa con "mes/dia/año". Igual podrá ser cualquier formato como "año/mes/dia" u otro. La solución que encontré tras meses de errores y trucos es indicar el mes con el nombre, por ejemplo, si la fecha es 10 de abril de 1981, indicarla así: "Apr/10/1981" ó "10/Apr/1981" ó "1981/Apr/10", el access la interpretará y entenderá que estamos hablando del 10 de abril de 1981. DEsarrollé entonces una clase en C# para hace esta tarea, aqui la expongo: using System; namespace TyroDeveloperDLL { public class ISODates{ /// <summary> /// Devuelve el formato ISO de fechas para MSAccess /// </summary> /// <param name="prmDate">Fecha a convertir</param> /// <returns>Fecha ISO para MSAccess</returns> /// <example>10 Abril 1980 10:25 a.m.= Apr-10-1980 10:25:00</example> public static string MSAccessDate(DateTime prmDate){ string[] varMonth ={"Jan","Feb","Mar","Apr", "May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; string varDay = "01"; string varHour = "00"; string varMin = "00"; string varSec = "00"; varDay = prmDate.Day.ToString(); if (varDay.Length == 1){ varDay = "0" + varDay; } varHour = prmDate.Hour.ToString(); if (varHour.Length == 1){ varHour = "0" + varHour; } varMin = prmDate.Minute.ToString(); if (varMin.Length == 1){ varMin = "0" + varMin; } varSec = prmDate.Second.ToString(); if (varSec.Length == 1){ varSec = "0" + varSec; } return (varMonth[prmDate.Month - 1] + "-" + varDay + "-" + prmDate.Year.ToString() + " " + varHour + ":" + varMin + ":" + varSec); } } } Espero que sea de utilidad... Visita mi Blog:
Este es nuestro archivo XML (Articulos.xml): <?xml version="1.0" encoding="utf-8"?> <Articulos> <Articulo idarticulo="1" idproveedor="1" pventa="10.00" existencia="94.00" nombre="Agua Epura 1.5L" /> </Articulos> Y este es el proceso para escribir en él: bool escribeDatos(int prmId, string prmProveedor, string prmPVenta, string prmExistencia, string prmNombre ) { try { XmlDocument originalXml = new XmlDocument( ) ; originalXml.CreateXmlDeclaration("1.0", "utf-8", null ) ; originalXml.Load("C:Articulos.xml" ) ; //Indicar aqui la ruta XmlNode menu = originalXml.SelectSingleNode("Articulos" ) ; XmlNode newSub = originalXml.CreateNode(XmlNodeType.Element, "Articulo", null ) ; //id XmlAttribute _Id = originalXml.CreateAttribute("idarticulo" ) ; _Id.Value = prmId.ToString( ) ; //proveedor XmlAttribute _idproveedor = originalXml.CreateAttribute("idproveedor" ) ; _idproveedor.Value = prmProveedor ; //precio XmlAttribute _precio = originalXml.CreateAttribute("pventa" ) ; _precio.Value = prmPVenta ; //canridad XmlAttribute _existencia = originalXml.CreateAttribute("existencia" ) ; _existencia.Value = prmExistencia ; //nombre XmlAttribute _nombre = originalXml.CreateAttribute("nombre" ) ; _nombre.Value = prmNombre ; //los agregamos newSub.Attributes.Append(_Id ) ; newSub.Attributes.Append(_idproveedor ) ; newSub.Attributes.Append(_precio ) ; newSub.Attributes.Append(_existencia ) ; newSub.Attributes.Append(_nombre ) ; menu.AppendChild(newSub ) ; //grabamos originalXml.Save("C:Articulos.xml" ) ;//Ruta del archivo return (true ) ; } catch { return (false ) ; } } Eso sería todo.. Visita mi blog : http://tyrodeveloper.blogspot.com/
Hola!! Te interesa aprender como desarrollar un punto de venta eb C#. Aqui hay un ejemplo de como hacer uno mas o menos como para un trabajo final de la escuela. Lo interesante es que este sistema es escalable y con un esfuerzo extra puedes hacer que funcione para una tienda y utilizarlo para registrar tus ventas reales. http://tyrodeveloper.blogspot.com/2009/08/crear-un-punto-de-venta-1-de-10.html Para aquellos que prefieren que alguien mas lo haga: http://tyrodeveloper.blogspot.com/2011/06/desarrollo-de-sistemas-y-programas-la.html Visita mi Blog: http://tyrodeveloper.blogspot.com/

Reporte de entradasDiseño de la pantallaPara comenzar, le daremos diseño al formulario "frmEntradasLista" el cual nos servirá para mostrar un listado de las entradas que se hayan registrado, la apariencia debe de quedar mas o menos así:Se agregaron tres Button, un ListView y un Label, las propiedades están descritas en la siguiente tabla:Ahora procedemos con el diseño del reporte de entradas, lo primero que haremos será crear un DataSet el cual nos servirá para el posterior diseño del reporte.Agregamos un nuevo objeto del tipo DataSet (en la carpeta <b>Reportes</b> y le asignamos el nombre <b>dsRptEntrada</b> como se muestra:Le damos diseño para que quede como se muestra:El DataSet aparece vacío, debemos agregar un DataTable y darle el diseño para que quede como se muestra en la imagen. De entre las propiedades que debemos destacar es que el tipo de datos de los campos <b>cantidad, precio_compra e iva</b> son System.Double. Los tipos de datos para los campos <b>id_articulo y articulo</b> son System.String. Una vez terminado el diseño del DataSet agregamos un Reporte (en la carpeta <b>Reportes</b>, pero utilizaremos un asistente, aqui muestro con imagenes todo el proceso:Selecionamos que nuestro origen de datos es un objeto:En la siguiente ventana, expanda todo y ubique el DataSet que acaba de crear anteriormente, como se muestra a continuación:Luego, escriba un nombre para el DataSet (propiedad <b>Name</b>, se recomienda poner el mismo que puso anteriormente:Arrastre los campos que desea mostrar en el reporte a la sección <b>Values</b> como se muestra en la imagen:Desactive la operación <b>Sum</b>:Seleccione un formato (apariencia):Elija a su gusto:Agregue el encabezado y el pié del reporte:Agregue los parametros <b>prmFechaEntrada, prmFechaFactura, prmFolioFactura y prmProveedor</b>Ejemplo de como agregar un parametro (Repitalo con los demás):Agregue cuatro TextBox al encabezado y organicelos ordenadamente:Arrastre los parametros creados enfrente de los TextBox:Agrege una columna al reporte:Puede darle diseño al reporte, hagalo a su gusto, aqui se muestra algo muy básico:Agregaremos una función para calcular el total:En seguida se muestra como hacerla:Agregaremos un nuevo formulario llamado <b>frmVerReporte</b> al cual agregaremos un control ReportViewer al cual estableceremos una propiedad <b>Modifiers=Public</b> (En la ventana de propiedades), aqui se muestra una imagen:Hasta aqui todo ha sido diseño, ahora escribiremos el código que hace todo posible:Declaramos las siguientes variables (En el formulario frmEntradasLista):string CnnStr = @" Provider=Microsoft.Jet.OLEDB.4.0; " + "Data Source=almacen.mdb; " + //<==Poner aqui la ruta de la base de datos "Jet OLEDB : Database Password=; Persist Security Info=False;"; //<==Ojo, no lleva espacios, sin espacios se ve: OLEDBatabasestring reportFile = @"rptEntrada.rdlc";//<==Poner aqui la ruta del reporteAhora agregamos los siguientes procedimientos:void generaColumnas(){ lvEntradas.Clear(); lvEntradas.View = View.Details; lvEntradas.Columns.Add("Folio ", 40, HorizontalAlignment.Left); lvEntradas.Columns.Add("Fecha Entrada", 85, HorizontalAlignment.Left); lvEntradas.Columns.Add("Fecha Factura", 85, HorizontalAlignment.Left); lvEntradas.Columns.Add("Folio Factura", 85, HorizontalAlignment.Left); lvEntradas.Columns.Add("Proveedor", 200, HorizontalAlignment.Left);}void mostrarEntradas() { try { OleDbConnection cnn = new OleDbConnection(CnnStr); cnn.Open(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = cnn; cmd.CommandText = "select * from entradas"; OleDbDataReader dr = cmd.ExecuteReader(); int i = 0; lvEntradas.Items.Clear(); while (dr.Read()) { //mostramos los datos lvEntradas.Items.Add(dr["id_entrada"].ToString()); lvEntradas.Items.SubItems.Add(String.Format("{0:dd/MM/yyyy}",dr["fecha_entrada"])); lvEntradas.Items.SubItems.Add(String.Format("{0:dd/MM/yyyy}", dr["fecha_factura"])); lvEntradas.Items.SubItems.Add(dr["folio_factura"].ToString()); lvEntradas.Items.SubItems.Add(dr["proveedor"].ToString()); i++; } dr.Close(); cnn.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); }} void mostrarReporte(int prmIdEntrada){ try { if (!File.Exists(reportFile)) { MessageBox.Show(String.Format("No se encuentra n{0}nRevise por favor", reportFile)); return; } //AHORA MOSTRAMOS EL REPORTE OleDbConnection cnn = new OleDbConnection(CnnStr); cnn.Open(); DataSet dsReporte = new DataSet(); OleDbDataAdapter da = new OleDbDataAdapter("select d.*,a.articulo "+ " from entradas_detalle d,articulos a "+ " where a.id_articulo=d.id_articulo and id_entrada="+ prmIdEntrada +"", cnn); da.Fill(dsReporte, "rptentrada" ) ; if (dsReporte.Tables["rptEntrada"].Rows.Count == 0) { cnn.Close(); MessageBox.Show("No hay Datos" ) ; return; } Formularios.frmVerReporte frm = new Formularios.frmVerReporte(); frm.reportViewer1.LocalReport.DataSources.Clear(); frm.reportViewer1.LocalReport.Dispose(); frm.reportViewer1.Reset(); frm.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("dsRptEntrada", dsReporte.Tables["rptEntrada"])); frm.reportViewer1.LocalReport.ReportPath = reportFile; //parametros List<ReportParameter> param = new List<ReportParameter>(); OleDbCommand cmd = new OleDbCommand("select * from entradas where id_entrada=" + prmIdEntrada + "", cnn); OleDbDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { //folio_factura ReportParameter pFolioFactura = new ReportParameter(); pFolioFactura.Name = "prmFolioFactura"; pFolioFactura.Values.Add(dr["folio_factura"].ToString()); param.Add(pFolioFactura); //fecha_entrada ReportParameter pFechaEntrada = new ReportParameter(); pFechaEntrada.Name = "prmFechaEntrada"; pFechaEntrada.Values.Add(dr["fecha_entrada"].ToString()); param.Add(pFechaEntrada); //fecha_factura ReportParameter pFechaFactura = new ReportParameter(); pFechaFactura.Name = "prmFechaFactura"; pFechaFactura.Values.Add(dr["fecha_factura"].ToString()); param.Add(pFechaFactura); //proveedor ReportParameter pProveedor = new ReportParameter(); pProveedor.Name = "prmProveedor"; pProveedor.Values.Add(dr["proveedor"].ToString()); param.Add(pProveedor); } dr.Close(); //agregamos los parametros a la coleccion frm.reportViewer1.LocalReport.SetParameters(param); frm.reportViewer1.RefreshReport(); frm.ShowDialog(); cnn.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error loading report", MessageBoxButtons.OK, MessageBoxIcon.Error); }}Agregamos sl siguiente código en el <b>Form_Load</b>:lvEntradas.DoubleClick += new EventHandler(lvEntradas_DoubleClick); generaColumnas(); mostrarEntradas();Luego, agregamos el siguiente código:void lvEntradas_DoubleClick(object sender, EventArgs e){ if (lvEntradas.SelectedItems.Count != 0) { int _FolioEntrada = Convert.ToInt32(lvEntradas.SelectedItems[0].Text ) ; mostrarReporte(_FolioEntrada); }}El código para el botón <b>btnNueva</b>:frmEntrada entrada = new frmEntrada();entrada.StartPosition = FormStartPosition.CenterScreen;entrada.ShowDialog();El código para el botón <b>btnMostrar</b>:mostrarEntradas();El código para el botón <b>btnSalir</b>:this.Close();Aqui un ejemplo de la pantalla funcionando:Aqui un ejemplo del reporte:Continuar con el siguiente post...http://www.taringa.net/posts/hazlo-tu-mismo/11574724/Creacion-de-un-sistema-de-almacen-con-C_-_Parte-5_.htmlVisita mi Blog:http://tyrodeveloper.blogspot.comSi deseas que te haga un trabajo de programación:http://tyrodeveloper.blogspot.com/2011/06/desarrollo-de-sistemas-y-programas-la.html
Hola amigos,.. ahora veremos como crear un autonumerico en un DataTable.El código es el siguiente:DataTable tmpVenta = new DataTable();//<==declaramso la tabla (REcomendado en la zona de declaraciones de)//>Definimos la tabla DataColumn idColumn = new DataColumn("id", typeof(int)); //<==Declaramos la columnaidColumn.Unique = true;//<==indicamos que será unicoidColumn.AutoIncrement = true; //<==Aqui indicamos que se autoincrementaidColumn.AutoIncrementSeed = 1;//<==Aqui indicamos que inicia en 1idColumn.AutoIncrementStep = 1;//<==Aqui indicamos que se incrementara de uno en uno tmpVenta.Columns.Add(idColumn);//<==Aquiagregamos la columna//otras columnas tmpVenta.Columns.Add("idproducto", typeof(int));tmpVenta.Columns.Add("descproducto", typeof(string));tmpVenta.Columns.Add("cantidad", typeof(Double));tmpVenta.Columns.Add("precio", typeof(Double));tmpVenta.PrimaryKey = new DataColumn[] { tmpVenta.Columns["id"] }; //<===Aqui primaryKey (Llave primaria)//<termina la deficinicón de la tabla Para insertar Datos a la Tabla://agregamos la venta a la tabla DataRow dr = tmpVenta.NewRow();dr["idproducto"] = "001";dr["descproducto"] = "Botanas";dr["cantidad"] = 10;dr["precio"] = 5.30;tmpVenta.Rows.Add(dr);Mostramos el contenido de la tabla en un ListView:void generaColumnas(){ //para poner las columnas del ListView lvVenta.Clear(); lvVenta.View = View.Details; lvVenta.Columns.Add("",0, HorizontalAlignment.Left); lvVenta.Columns.Add("Id ", 50, HorizontalAlignment.Left); lvVenta.Columns.Add("Producto", 200, HorizontalAlignment.Left); lvVenta.Columns.Add("Cantidad", 80, HorizontalAlignment.Right); lvVenta.Columns.Add("Precio", 80, HorizontalAlignment.Right); lvVenta.Columns.Add("Total", 80, HorizontalAlignment.Right);}void mostrarVenta(){ try { double varIVA = 0; //double varSUBTOTAL = 0; double varTOTAL = 0; lvVenta.Items.Clear(); for (int i = 0; i < tmpVenta.Rows.Count; i++) { lvVenta.Items.Add(tmpVenta.Rows["id"].ToString()); lvVenta.Items.SubItems.Add(tmpVenta.Rows["idproducto"].ToString()); lvVenta.Items.SubItems.Add(tmpVenta.Rows["descproducto"].ToString()); lvVenta.Items.SubItems.Add(String.Format("{0:N}", Convert.ToDouble(tmpVenta.Rows["cantidad"]))); lvVenta.Items.SubItems.Add(String.Format("{0:C}", Convert.ToDouble(tmpVenta.Rows["precio"]))); lvVenta.Items.SubItems.Add(String.Format("{0:C}", (Convert.ToDouble(tmpVenta.Rows["precio"]) * Convert.ToDouble(tmpVenta.Rows["cantidad"])))); varTOTAL += Convert.ToDouble(tmpVenta.Rows["precio"]) * Convert.ToDouble(tmpVenta.Rows["cantidad"]); varIVA += (Convert.ToDouble(tmpVenta.Rows["cantidad"]) * Convert.ToDouble(tmpVenta.Rows["precio"])) - ((Convert.ToDouble(tmpVenta.Rows["cantidad"]) * Convert.ToDouble(tmpVenta.Rows["precio"])) / (1.16)); } lblTotal.Text = "Iva: "+String.Format("{0:C}", varIVA) + "nTotal: " + String.Format("{0:C}", varTOTAL); //<==Debe existir esta etiqueta } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); }}Listo, espero que les sirva.Visiten mi Blog:http://tyrodeveloper.blogspot.com/Si desean que les haga un sistema/programa/capacitacion, visiten esta entrada de mi blog:http://tyrodeveloper.blogspot.com/2011/06/desarrollo-de-sistemas-y-programas-la.html
Hola amigos, en esta ocasion veremos como lograr que solo se puedan introducir numeros en un TextBox a traves de una clase C#:public class TextBoxAdd{ static int _decimales = 3; /// <summary> /// Cantidad de decimales /// </summary> public int Decimales{ get { return (_decimales); } set { _decimales = value; } } /// <summary> /// Solo números /// </summary> /// <param name="_TextBox">Objeto TextBox</param> /// <param name="e">KeyPressEventArgs</param> public static void OnlyNumeric(System.Windows.Forms.TextBox _TextBox, System.Windows.Forms.KeyPressEventArgs e){ if (e.KeyChar == 8){ e.Handled = false; return; } if (_TextBox.Text.Length == 0) { if((e.KeyChar == Convert.ToChar("-" ) ) ) { e.Handled = false; return; } } bool IsDec = false; int nroDec = 0; for (int i = 0; i < _TextBox.Text.Length; i++){ if (_TextBox.Text == '.') IsDec = true; if (IsDec && nroDec++ >= _decimales){ e.Handled = true; return; } } if (e.KeyChar >= 48 && e.KeyChar <= 57) e.Handled = false; else if (e.KeyChar == 46) e.Handled = (IsDec) ? true : false; else e.Handled = true; }}Bueno, esto es todo, visiten mi blog: Si desean que les haga un sistema/aplicación/programa:

Salidas del AlmacénDiseño de la pantallaEmpezaremos diseñando la pantalla de salidas (formulario frmSalida), la apariencia debe de quedar mas o menos así:A continuacion una tabla descriptiva con los nombres de los objetos:ProgramaciónLa parte de la programación es la mas enredada. Voy a considerar que el lector es un novato con nociones bastante básicas e insuficientes como para comprender la estructura de la programación C#. Recomiendo al lector poner mucha atención a los pasos que aqui se describan y no omitir nada, leer y re-leer hasta que haya comprendido lo que tiene que hacer.Declaramos las siguientes variables://VariablesDataTable tmpEntrada = new DataTable();string CnnStr = @" Provider=Microsoft.Jet.OLEDB.4.0; " + "Data Source=almacen.mdb; " +//<==poner aqui la ruta de la base de datos "Jet OLEDB : Database Password=; Persist Security Info=False;"; //<== ojo, aqui no lleva espacios, sin espacios se ve OLEDBatabaseEscribiremos el código de las funciones y procedimientos:void generaColumnas(){ lvSalida.Clear(); lvSalida.View = View.Details; lvSalida.Columns.Add("", 0, HorizontalAlignment.Left); lvSalida.Columns.Add("Id ", 100, HorizontalAlignment.Left); lvSalida.Columns.Add("Producto", 240, HorizontalAlignment.Left); lvSalida.Columns.Add("Cantidad", 60, HorizontalAlignment.Right);}void mostrarEntrada(){ try { lvSalida.Items.Clear(); for (int i = 0; i < tmpEntrada.Rows.Count; i++) { lvSalida.Items.Add(tmpEntrada.Rows["id"].ToString()); lvSalida.Items.SubItems.Add(tmpEntrada.Rows["id_articulo"].ToString()); lvSalida.Items.SubItems.Add(tmpEntrada.Rows["articulo"].ToString()); lvSalida.Items.SubItems.Add(String.Format("{0:N}", Convert.ToDouble(tmpEntrada.Rows["cantidad"]))); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); }}bool agregarArticulo(string prmIdArticulo, double prmCantidad){ try { string varId = ""; string varNombre = ""; double varExistencia = 0; OleDbConnection cnn = new OleDbConnection(CnnStr); cnn.Open(); string strSQL = "select articulo,existencia from articulos " + "where id_articulo='" + prmIdArticulo + "'"; OleDbCommand cmd = new OleDbCommand(strSQL, cnn); OleDbDataReader dr = cmd.ExecuteReader(); if (dr.Read()) { varId = prmIdArticulo; varNombre = dr["articulo"].ToString(); varExistencia =Convert.ToDouble(dr["existencia"]); if (varExistencia >= prmCantidad) { //agregamos la venta a la tabla temporal DataRow row = tmpEntrada.NewRow(); row["id_articulo"] = varId; row["articulo"] = varNombre; row["cantidad"] = prmCantidad; tmpEntrada.Rows.Add(row); } else { MessageBox.Show("No hay suficientes existencias " ) ; } } else { MessageBox.Show("El articulo no existe", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return (false); } dr.Close(); cnn.Close(); return (true); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return (false); }}bool grabarSalida(string prmFechaSalida, string prmResponsable, string prmUserLogin){ try { OleDbConnection cnn = new OleDbConnection(CnnStr); cnn.Open(); OleDbTransaction tran = cnn.BeginTransaction(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = cnn; cmd.Transaction = tran; //insertamos el registro de la Entrada try { cmd.CommandText = "insert into salidas(fecha_salida,responsable,user_login) " + " values (#" + prmFechaSalida + "#,'" + prmResponsable + "','" + prmUserLogin + "')"; cmd.ExecuteNonQuery(); //obtenemos el folio int _FolioSalida = 0; cmd.CommandText = "select @@identity"; _FolioSalida = Convert.ToInt32(cmd.ExecuteScalar()); //insertamos el detalle de laentrada for (int i = 0; i < tmpEntrada.Rows.Count; i++) { string _IdArticulo = Convert.ToString(tmpEntrada.Rows["id_articulo"]); double _Cantidad = Convert.ToDouble(tmpEntrada.Rows["cantidad"]); //insertamos el articulo cmd.CommandText = "insert into salidas_detalle(id_salida,id_articulo,cantidad) " + "values(" + _FolioSalida + ",'" + _IdArticulo + "'," + _Cantidad + " ) "; cmd.ExecuteNonQuery(); //actualizamosexistencias cmd.CommandText = "update articulos set " + " existencia=existencia - " + _Cantidad + "" + " where id_articulo='" + _IdArticulo + "'"; cmd.ExecuteNonQuery(); } //finalizamos la transaccion tran.Commit(); cnn.Close(); MessageBox.Show("Salida grabada correctamente", "Información del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information); return (true); } catch (OleDbException errEntrada) { tran.Rollback(); cnn.Close(); MessageBox.Show(errEntrada.Message); return (false); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return (false); }}Ahora damos doble clic sobre el botón Agregar (btnAgregar) y escribimos el siguiente código:try{ if (agregarArticulo(txtIdArticulo.Text, Convert.ToDouble(txtCantidad.Text ) ) ) { mostrarEntrada(); }}catch (Exception ex){ MessageBox.Show(ex.Message);}Ahora, agregaremos el código para grabar la entrada, hacemos doble clic sobre el botón Grabar (btnGrabar) y escribimos el siguiente código:if (grabarSalida(dtpFechaSalida.Value.ToShortDateString(), txtResponsable.Text, "admin" ) ) { this.Close();}El código que pondremos en el Form_Load es el siguiente://>Definimos la tabla para las salida TemporalDataColumn idColumn = new DataColumn("id", typeof(int));idColumn.Unique = true;idColumn.AutoIncrement = true;idColumn.AutoIncrementSeed = 1;idColumn.AutoIncrementStep = 1;tmpEntrada.Columns.Add(idColumn);//declaramos el resto de los campostmpEntrada.Columns.Add("id_articulo", typeof(string));tmpEntrada.Columns.Add("articulo", typeof(string));tmpEntrada.Columns.Add("cantidad", typeof(Double));//agregamos un primary keytmpEntrada.PrimaryKey = new DataColumn[] { tmpEntrada.Columns["id"] };//<termina la deficinicón de la tabla temporalgeneraColumnas();mostrarEntrada();En el botón Salir (btnSalir) escribimos esto:this.Close();Aqui un ejemplo de la pantalla funcionando:Continuar con el siguiente post...http://tyrodeveloper.blogspot.com/2011/07/creacion-de-un-sistema-de-almacen-con-c_8470.htmlVisita mi Blog:http://tyrodeveloper.blogspot.comSi deseas que te haga un trabajo de programación:http://tyrodeveloper.blogspot.com/2011/06/desarrollo-de-sistemas-y-programas-la.html
Creación de la Base de datos Creamos una base de datos con Microsoft Access, con las siguientes tablas: Una vez que diseñamos nuestras tablas, las relacionamos. Las relaciones deben de quedar así: Especificaciones técnicas: 1. Todos los nombres de los campos son con minúsculas. Esto no afecta en la programación, pero deseamos poder llevar un estándar en todo lo que vayamos desarrollando. 2. Deberá respetar los tipos de datos, eso nos evitará posibles errores en tiempo de ejecución. Continuar con el siguiente post: Creación de un sistema de almacen con C# (Parte 3) Visita mi Blog: http://tyrodeveloper.blogspot.com Si deseas que te haga un trabajo de programación: http://tyrodeveloper.blogspot.com/2011/06/desarrollo-de-sistemas-y-programas-la.html
Hola amigos, en esta ocasión veremos como leer y escribir el archivo de configuración de una aplicación WindowsForms con C#.Para hacer mas sencillo el trabajo, todo se los pondré en una clase:public class AppSettings{ public AppSettings() { } private void InitializeComponent() { } /// <summary> /// Establecer valor /// </summary> /// <param name="seccion">Sección</param> /// <param name="clave">Clave</param> /// <param name="valor">Valor a establecer</param> public static void SetValue(string seccion, string clave, string valor) { System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None ) ; //Borramos la configuración actual config.AppSettings.Settings.Remove(seccion + "." + clave ) ; config.Save(ConfigurationSaveMode.Modified ) ; //Force a reload of the changed section. ConfigurationManager.RefreshSection("appSettings" ) ; //Grabamos la configuración nueva config.AppSettings.Settings.Add(seccion + "." + clave, valor ) ; // Save the configuration file. config.Save(ConfigurationSaveMode.Modified ) ; //Force a reload of the changed section. ConfigurationManager.RefreshSection("appSettings" ) ; } /// <summary> /// Obtener valor /// </summary> /// <param name="seccion">Sección</param> /// <param name="clave">Clave</param> /// <param name="predeterminado">Valor predeterminado (en caso de no encontrarse)</param> /// <returns>Valor encontrado</returns> public static string GetValue(string seccion, string clave, string predeterminado) { string _return = ""; try{ _return=ConfigurationManager.AppSettings[seccion + "." + clave]; if(_return=="" ){ _return = predeterminado; } return(_return ) ; } catch{ return(predeterminado ) ; } } /// <summary> /// Obtener valor /// </summary> /// <param name="seccion">Sección</param> /// <param name="clave">Clave</param> /// <returns>Valor encontrado</returns> public static string GetValue(string seccion, string clave) { string _return = ""; try { _return = ConfigurationManager.AppSettings[seccion + "." + clave]; if (_return == "" ) { _return = ""; } return (_return ) ; } catch { return ("" ) ; } } }Explicación:Tenemos dos procesos, uno para leer (GetValue) y otro para escribir(SetValue). Para leer no hay complejidad, solamente utilizamos la instrucción "ConfigurationManager.AppSettings" que es la encagada de traernos un valor del archivo de configuración.En el caso de escribir, si es un poco complejo ya que batallé mucho para "actualizar" el dato que se iba a grabar; lo solucioné borrandolo y escribiendolo de nuevo "config.AppSettings.Settings.Remove". En si lo que hago es utilizar las clases ya proporcionadas por el .NetFramework dandole una lógica de lectura/escritura segun el caso. Bueno, esto es todo, visiten mi blog:http://tyrodeveloper.blogspot.com/Si desean que les haga un sistema/aplicación/programa:http://tyrodeveloper.blogspot.com/2011/06/desarrollo-de-sistemas-y-programas-la.html