none
Detalle

    Question

  • Hola como agregar un detalle de una factura por ejemplo usando 3 capas y list<>


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    Saturday, March 09, 2013 10:26 PM

All replies

  • agrega una nueva instancia en el List<> que represente el detalle de la factura  y listo

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Saturday, March 09, 2013 10:38 PM
  • Me sale un error en lista

     private void NuevaLinea()
            {
                List<DGVLine> NewList = new List<DGVLine>();
           
                DGVLine detalle = new DGVLine();
                detalle.Codigo = Convert.ToInt32(txtIdProducto.Text);
                detalle._Producto = Convert.ToString(txtIdProducto.Text);
                detalle.Precio = Convert.ToDecimal(txtPrecio.Text);
                detalle.Cantidad = Convert.ToInt32(txtCantidad.Text);
    
    
                dgvVentaFactura.DataSource = detalle;
                {
                    List<DGVLine> Lista = dgvVentaFactura.DataSource as List<DGVLine>;
                    foreach (DGVLine item in Lista)
                        NewList.Add((DGVLine)item.Clone());
                }
    
                NewList.Add(new DGVLine());
    
                dgvVentaFactura.AutoGenerateColumns = false;
                dgvVentaFactura.DataSource = NewList;
            }


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    Saturday, March 09, 2013 11:37 PM
  • pues ese codigo la verdad no lo entiendo

    que haces dos llaves alli sueltas despues de la linea

     dgvVentaFactura.DataSource = detalle;

    ---

    ademas como es que asignas la variable detalle al datasource cuando sabes que esta no es una coleccion de items, eso esta muy mal

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Saturday, March 09, 2013 11:49 PM
  • Haber esto pero necesito ponerlo en un while o for 

     private List<DGVLine> NuevaLinea()
            {
    
                List<DGVLine> lista = new List<DGVLine>();
                DGVLine detalle = new DGVLine();
                detalle.Codigo = Convert.ToInt32(txtIdProducto.Text);
                detalle._Producto = Convert.ToString(txtIdProducto.Text);
                detalle.Precio = Convert.ToDecimal(txtPrecio.Text);
                detalle.Cantidad = Convert.ToInt32(txtCantidad.Text);
    
                lista.Add(detalle);
                return lista;
    
            }


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    Sunday, March 10, 2013 12:36 AM
  • Ahora si 

    private List<DGVLine> NuevaLinea()
            {
    
                List<DGVLine> lista = new List<DGVLine>();
                DGVLine detalle = new DGVLine();
                detalle.Codigo = Convert.ToInt32(txtIdProducto.Text);
                detalle._Producto = Convert.ToString(txtIdProducto.Text);
                detalle.Precio = Convert.ToDecimal(txtPrecio.Text);
                detalle.Cantidad = Convert.ToInt32(txtCantidad.Text);
    
                lista.Add(detalle);
                return lista;
    
            }

     private void btnAgregar_Click(object sender, EventArgs e)
            {
                dgvVentaFactura.DataSource = NuevaLinea();
            }

    Ya salio pero me esta chancando el registro que esta primero


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    Sunday, March 10, 2013 1:04 AM
  • Como puedo hacer para que no me chanque el primer registro que agregue una nueva registro

    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    Sunday, March 10, 2013 2:05 AM
  • Hola

    Deseo agregar registros a una lista, es para un detalle de factura

    private List<DGVLine> NuevaLinea()
            {
    
                List<DGVLine> lista = new List<DGVLine>();
                while 
                {
                DGVLine detalle = new DGVLine();
                detalle.Codigo = Convert.ToInt32(txtIdProducto.Text);
                detalle._Producto = Convert.ToString(txtProducto.Text);
                detalle.Precio = Convert.ToDecimal(txtPrecio.Text);
                detalle.Cantidad = Convert.ToInt32(txtCantidad.Text);
                detalle.Monto = (detalle.Precio * detalle.Cantidad);
                    lista.Add(detalle);
                }
                
                return lista;
    
            }

    Como lo puedo hacer ya que cuando agrego un item al grid me chanca el primero y queda el ultimo


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    Sunday, March 10, 2013 3:07 AM
  • Ya salio pero me esta chancando el registro que esta primero

    es que si pones la linea

     List<DGVLine> lista = new List<DGVLine>();

    es logico que por cada vez que quieras agregar una nueva inicializas la lista

    deberias toimar la lista previa si es que ya hay items cargados


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Sunday, March 10, 2013 3:15 AM
  • Como lo hago?

    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    Sunday, March 10, 2013 3:26 AM
  • podrias declarar la linea

     List<DGVLine> lista = new List<DGVLine>();

    a nivel del formulario

    y usar

    private void NuevaLinea()
    {
                DGVLine detalle = new DGVLine();
                detalle.Codigo = Convert.ToInt32(txtIdProducto.Text);
                detalle._Producto = Convert.ToString(txtIdProducto.Text);
                detalle.Precio = Convert.ToDecimal(txtPrecio.Text);
                detalle.Cantidad = Convert.ToInt32(txtCantidad.Text);
    
                lista.Add(detalle);
    
    }

    luego si quieres mostrar en el control grid tomas la variable lista y la asignas al datasource

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Sunday, March 10, 2013 3:36 AM
  • Leandro 

    Aún no me sale pero he intentado eso :

    private void NuevaLinea()
            {
                if (lista != null)
                {
                    DGVLine detalle = new DGVLine();
                    detalle.Codigo = Convert.ToInt32(txtIdProducto.Text);
                    detalle._Producto = Convert.ToString(txtProducto.Text);
                    detalle.Precio = Convert.ToDecimal(txtPrecio.Text);
                    detalle.Cantidad = Convert.ToInt32(txtCantidad.Text);
                    detalle.Monto = (detalle.Precio * detalle.Cantidad);
    
                    lista.Add(detalle);
    
                    dgvVentaFactura.DataSource = lista;
    
                }
                else
                {
                    lista = dgvVentaFactura.DataSource as List<DGVLine>;
                    foreach (DGVLine detalle in lista)
                        lista.Add((DGVLine) detalle);
                }
    
            }


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    Sunday, March 10, 2013 4:26 AM
  • si la lista la mantienes a nivel del formulario no necesitas hacer esto

     lista = dgvVentaFactura.DataSource as List<DGVLine>;

    usas la variable de la lista directamente, como en el ejmeplo que puse anterirmente


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Sunday, March 10, 2013 4:37 AM
  • Leandro

    deberias toimar la lista previa si es que ya hay items cargados

    Como le digo al código que verifique si hay items cargados lo hice de esta manera :

    private void NuevaLinea()
            {
                if (lista != null)
                {
                    DGVLine detalle = new DGVLine();
                    detalle.Codigo = Convert.ToInt32(txtIdProducto.Text);
                    detalle._Producto = Convert.ToString(txtProducto.Text);
                    detalle.Precio = Convert.ToDecimal(txtPrecio.Text);
                    detalle.Cantidad = Convert.ToInt32(txtCantidad.Text);
                    detalle.Monto = (detalle.Precio * detalle.Cantidad);
    
                    lista.Add(detalle);
    
                    dgvVentaFactura.DataSource = lista;
    
                }
                else
                {
                    foreach (DGVLine detalle in lista)
                        lista.Add((DGVLine) detalle);
                }
    
            }
    

    Pero siempre entran a la primera condición nunca entran al else


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    Sunday, March 10, 2013 12:00 PM
  • Responder me parece que es así pero me sale el siguiente error :

     public class DGVLine
            {
                public int Codigo { get; set; }
                public string _Producto { get; set; }
                public decimal Precio { get; set; }
                public int Cantidad { get; set; }
                public decimal Monto { get; set; }
    
                #region ICloneable Members
    
                public object Clone()
                {
                    DGVLine item = new DGVLine();
                    item.Codigo = this.Codigo;
                    item._Producto = this._Producto;
                    item.Precio = this.Precio;
                    item.Cantidad = this.Cantidad;
                    item.Monto = this.Monto;
    
                    return item;
                }
    
                #endregion
            }
     detalle.Monto = Convert.ToDecimal(detalle.Precio * detalle.Cantidad); corrección monto de la imagen


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    Sunday, March 10, 2013 12:15 PM
  • para que haces ese foreach, volcando los datos que ya tiene la lista nuevamente

    ese foreach puede quitarlo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Sunday, March 10, 2013 12:34 PM
  • Ya quite el foreach y queda así 

     private void NuevaLinea()
            {
                if (lista != null)
                {
                    DGVLine detalle = new DGVLine();
                    detalle.Codigo = Convert.ToInt32(txtIdProducto.Text);
                    detalle._Producto = Convert.ToString(txtProducto.Text);
                    detalle.Precio = Convert.ToDecimal(txtPrecio.Text);
                    detalle.Cantidad = Convert.ToInt32(txtCantidad.Text);
                    detalle.Monto = Convert.ToDecimal(detalle.Precio * detalle.Cantidad);
    
                    lista.Add(detalle);
    
                    dgvVentaFactura.DataSource = lista;
                }  
    
            }

    Otra cosa voy a poner esto

    lista.Add((DGVLine) detalle)

    Para aumentar un registro a la grilla pero cuando carga mi grilla me sale un registro vacío el cual no debe salir 

    Solo  me debe salir el encabezado para poder agregar filas a la grilla, como configuro la grilla para que no salga esa fila?


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    Sunday, March 10, 2013 12:46 PM
  • Para aumentar un registro a la grilla pero cuando carga mi grilla me sale un registro vacío el cual no debe salir

    define la propiedad del datagridview, AllowUserAddRows en false


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Sunday, March 10, 2013 1:01 PM
  • Leandro

    Gracias ya corregí lo de la columna que salia demás gracias por la ayuda, pero siempre hay un pero, pero en el código :

     private void NuevaLinea()
            {
                if (lista != null)
                {
                    DGVLine detalle = new DGVLine();
                    detalle.Codigo = Convert.ToInt32(txtIdProducto.Text);
                    detalle._Producto = Convert.ToString(txtProducto.Text);
                    detalle.Precio = Convert.ToDecimal(txtPrecio.Text);
                    detalle.Cantidad = Convert.ToInt32(txtCantidad.Text);
                    detalle.Monto = Convert.ToDecimal(detalle.Precio * detalle.Cantidad);
    
                    lista.Add(detalle);
                    //lista.Add(new DGVLine()); ==> Con esto me agrega una grilla demás por eso la comente
    
                    dgvVentaFactura.DataSource = lista;
                }  
    
            }
    Cuando agrego un nuevo registro esta en la lista le he verificado, pero en la grilla solo me muestra el primero que había agregado antes, como puedo solucionar eso.


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    Sunday, March 10, 2013 1:20 PM
  • para que pones esto

     if (lista != null)

    no se supone que la lista la inicias en el form_load, por lo que nucna sera null

    ademas con un breakpoint podrias validar si ingresa en el if y agrega el nuevo item

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    Sunday, March 10, 2013 2:23 PM
  • Agrega el nuevo item a la lista pero no a la grilla

    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    Sunday, March 10, 2013 3:01 PM
  • Leandro

    no se supone que la lista la inicias en el form_load, por lo que nucna sera null

    Te refieres a esto ponerlo en el load

     public partial class frmFactura : Form
        {
            List<DGVLine> lista = new List<DGVLine>();
            public frmFactura()
            {
                InitializeComponent();
            }

    List<DGVLine> lista = new List<DGVLine>(); Esto lo pongo en el load

    Así como esta esta a nivel de formulario como me indicastes.


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    Sunday, March 10, 2013 3:04 PM
  • hola

    prueba clonar la listapara asignarla al datasource del grid

    http://social.msdn.microsoft.com/Forums/es-ES/vcses/thread/97b58dc5-ec63-465c-a492-1d9d56a50c41/

    http://social.msdn.microsoft.com/Forums/es-ES/vcses/thread/6a2fff42-1686-4c66-a477-a6d086c32f7f/

    como veras una forma simple de clonar es usando la serializacion a xml, con eso swerializas y desserializas para clonar la instancia

    ya que veo que el grid solo muestra los datos si la instancia en menoria cambia

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Sunday, March 10, 2013 3:19 PM
  • Pq? algo tan sencillo que se hace con un datatable se complica al usar lista y eso que lo de agregar solo lo estoy haciendo en la presentación.

    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    Sunday, March 10, 2013 6:07 PM