none
Como modificar el valor de un dato almacenado manualmente en un datagrid WPF Y C# RRS feed

  • Pregunta

  • C# Y WPF

    Buenas mi consulta es la siguiente: Estoy intentando crear un punto de venta pequeño.

    Actualmente agrego los datos (Cantidad, Producto, Precio) desde textbox  al datagrid y se agregan correctamente, el problema es si ya tengo agregado un registro por ejemplo (1, Coca Cola 500ml, 500) a la hora que deseo agregar otra coca cola de 500ml se duplica el registro en el datagrid, lo que quiero lograr es que en lugar que se duplique el registro solo se sume la cantidad. Agradezco cualquier ayuda estoy empezando en la programación Estoy usando 

    El código para agregar las columnas al datagrid es el siguiente:

    DataGridTextColumn c1 = new DataGridTextColumn();
                c1.Header = "CANTIDAD";
                c1.Binding = new Binding("Cantidad");
                c1.Width = 100;
                dgdatos.Columns.Add(c1);
                DataGridTextColumn c2 = new DataGridTextColumn();
                c2.Header = "PRODUCTO";
                c2.Width = 300;
                c2.Binding = new Binding("Producto");
                dgdatos.Columns.Add(c2);
                DataGridTextColumn c3 = new DataGridTextColumn();
                c3.Header = "PRECIO";
                c3.Width = 100;
                c3.Binding = new Binding("Precio");
                dgdatos.Columns.Add(c3);

    El codigo para llenar el datagrid es el siguiente 

                            dgdatos.Items.Add(new Item() { Cantidad = Convert.ToInt32(txtcant.Text), Producto = txtproduc.Text, Precio = Convert.ToInt32(txtprecio.Text) });


                            txtcant.Text = "";
                            txtproduc.Text = "";
                            txtprecio.Text = "";

                            txtcant.Focus();

    Y tambien se utiliza la clase Item

            public class Item
            {
                public int Cantidad { get; set; }
                public string Producto { get; set; }
                public int Precio { get; set; }
            }

    sábado, 20 de marzo de 2021 4:07

Respuestas

  • Mi recomendación es que no añadas los datos directamente al DataGrid. En su lugar, añádelos a una colección en memoria, tal como un datatable o un ObservableCollection<Item>, y después aplica un databinding desde esa colección al DataGrid. Visualmente no se notará diferencia, y los items aparecerán en el datagrid exactamente igual. Pero ahora tienes la ventaja de que al tener los datos guardados en tu colección puedes hacer búsquedas en la misma, y si encuentras un producto dado puedes incrementar la cantidad y automáticamente cambiará en el datagrid. Bueno, tal como lo tienes no cambiará automáticamente a no ser que repitas el binding. Para que el cambio se dispare automáticamente al cambiar la cantidad tendrás que implementar INotifyPropertyChanged en tu clase Item. Esto es algo completamente standard cuando se usa databinding en WPF; encontrarás todos los ejemplos que quieras si haces una búsqueda en la Red.
    sábado, 20 de marzo de 2021 10:44
    Moderador

Todas las respuestas

  • Mi recomendación es que no añadas los datos directamente al DataGrid. En su lugar, añádelos a una colección en memoria, tal como un datatable o un ObservableCollection<Item>, y después aplica un databinding desde esa colección al DataGrid. Visualmente no se notará diferencia, y los items aparecerán en el datagrid exactamente igual. Pero ahora tienes la ventaja de que al tener los datos guardados en tu colección puedes hacer búsquedas en la misma, y si encuentras un producto dado puedes incrementar la cantidad y automáticamente cambiará en el datagrid. Bueno, tal como lo tienes no cambiará automáticamente a no ser que repitas el binding. Para que el cambio se dispare automáticamente al cambiar la cantidad tendrás que implementar INotifyPropertyChanged en tu clase Item. Esto es algo completamente standard cuando se usa databinding en WPF; encontrarás todos los ejemplos que quieras si haces una búsqueda en la Red.
    sábado, 20 de marzo de 2021 10:44
    Moderador
  • Muchas gracias intentare implementar la corrección a ver si lo logro 
    sábado, 20 de marzo de 2021 13:27
  • Hola,

    ¿Alguna novedad sobre la consulta realizada?

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    lunes, 22 de marzo de 2021 14:03
    Moderador