C sharp - Añadir línea al datagrid con cada clic

   
Vista:
Imágen de perfil de Jhon

Añadir línea al datagrid con cada clic

Publicado por Jhon (7 intervenciones) el 20/03/2016 04:30:12
Saludos gente!

Espero que puedan ayudarme porque se me acaba el plazo para entregar esta actividad :(
Tengo que hacer una aplicación de C# para una tienda (Soy estudiante de análisis y desarrollo de sistemas de información). La tengo que hacer en C# y SQL Server (NInguna de las dos cosas las había tocado nunca) y hasta ahora me estaba yendo muy bien. Pero me he quedado atascado.
He creado perfectamente los formularios y clases para el CRUD de clientes, proveedores, productos, empleados, etc.
Sólo me falta la parte de facturación pero me he quedado en un punto y no entiendo el motivo:
En los otros formularios, crear un empelado por ejemplo, yo lleno los textbox, le doy crear y se realiza. Vuelvo a cambiarlos vuelvo a hacerlo y así todas las veces que quiera.
Pero en la facturación no me funciona así.
Tengo un combobox (Exigencia del ejercicio que sea combobox) donde están mis productos, un numericupdown para la cantidad y un botón de añadir.
Escojo el producto tal, tantas unidades y al darle a añadir efectúa una consulta join para enviar a un datagridview nombre, precio y cantidad. Hasta ahí bien.


Captura

Observen que le di añadir y se agregó. Ahora quiero añadir otro producto al datagrid porque el cliente quiere comprar otra cosa. Cambio el producto en el combobox, cambio la cantidad, le doy a añadir y.... Nada!!!
No entiendo por qué pero sólo funciona la primera y necesito ir añadiendo al datagrid los demás productos hasta que le de finalizar.
Mi datagrid se "alimenta" de una lista de objetos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
List<Facdetalles> listaDetalles = new List<Facdetalles>(); //Al final esto irá a mi tabla de detalles
        List<JoinFactura> listaFactura = new List<JoinFactura>(); //Esta es la que alimenta el datagridview
        private void btnanadir_Click(object sender, EventArgs e)
        {
            if (txtfactura.Text == "0" || txtcanti.Text =="0") //La factura es numérica por exigencia del ejercicio
            {
                MessageBox.Show("No has colocado el número de factura o la cantidad", "Naturvida dice:");
            }
            else {
                    int procodigo = ProductosDAL.buscaUnProducto(cmbprod.Text);//Obtiene la clave foránea idProducto
                    Facdetalles det = new Facdetalles();
                    JoinFactura datos = new JoinFactura(); //Es el objeto con los datos que van a a lista que alimenta el datagrid
                    det.facNumerofk = Convert.ToInt32(txtfactura.Text);
                    det.facProductofk = procodigo;
                    datos.producto = JoinFacturaDAL.producto(det.facProductofk);
                    det.facCantidad = Convert.ToInt32(txtcanti.Text);
                    datos.precio = JoinFacturaDAL.valor(det.facProductofk);
                    datos.cantidad = det.facCantidad;
                    listaDetalles.Add(det);
                    listaFactura.Add(datos);
                    gridDetalles.DataSource = listaFactura;
                }
            }

Hasta ahora he venido trabajando muy contento con C# a pesar de no haberlo tocado nunca ni haber usado nunca programación en capas, seguro que es una tontería pero he hecho un montón de formularios para esta app sin ese problema. Y el tiempo ya me apremia.

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jhon

Añadir línea al datagrid con cada clic

Publicado por Jhon (7 intervenciones) el 20/03/2016 05:32:53
El problema es que el datagridview no sé cómo hacer para que vaya actualizando una nueva row con cada clic. Porque la lista sí que se va aumentando en cada clic.
Lo sé porque en esta captura lo que le dije fue que mandara el .count a la textbox total a pagar:


Captura2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jhon

Añadir línea al datagrid con cada clic

Publicado por Jhon (7 intervenciones) el 20/03/2016 05:52:46
Bueno, parece que he hecho un poco de rubber ducking y ustedes han sido mi pato de goma. He conseguido que funcione de un modo alternativo:
Cree columnas y a cada columna le asigné una propiedad del nuevo objeto. Y utilicé la opción .Rows.Add() que acabo de enterarme que existe.
Supongo que la lista me sobra ahora :)


Captura3

Gracias por ser mi pato :P
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo

Añadir línea al datagrid con cada clic

Para usar la lista como origen de datos del datagridview, debes hacer algo tan sencillo como esto:
gridDetalles.DataSource =null;
gridDetalles.DataSource = listaFactura;

Espero te sirva.

Saludos cordiales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jhon

Añadir línea al datagrid con cada clic

Publicado por Jhon (7 intervenciones) el 22/03/2016 13:36:54
Yo intenté gridDetalles.DataSource = listaFactura; antes pero sin declararlo null primero.
Gracias por la info.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar