How to add more than one string in a List

0

I have a customer registration system and am trying to add products to registered customers. For the list of the cadastre I have the following:

public class Cliente
{
    public string Nome { get; set; }
    public string CPF { get; set; }
    public List<ProdutoComprado> Comprou { get; set; }
}

public class ProdutoComprado
{
    public string NomeProduto { get; set; }
    public string ValorProduto { get; set; }
}

public static List<Cliente> Clientes = new List<Cliente>();
public static List<ProdutoComprado> ProdutosComprados = new List<ProdutoComprado>();

To register the client, I use the following code:

private void btnCadastrarCliente_Click(object sender, EventArgs e)
    {
        Cliente cliente = new Cliente();
        cliente.Nome = caixaClienteNome.Text;
        cliente.CPF = caixaClienteCPF.Text;
        listaClientes.Items.Add(cliente.Nome);
        Clientes.Add(cliente);
    }

To register a product for the customer I use:

private void btnCadastrarProduto_Click(object sender, EventArgs e)
    {
        Cliente procli = Clientes[listaClientes.SelectedIndex];
        procli.Comprou = new List<ProdutoComprado>
        {
            new ProdutoComprado
            {
                NomeProduto = caixaProdutoComprado.Text,
                ValorProduto = caixaValor.Text
            }
        };
        foreach (var prod in procli.Comprou)
        {
            ProdutosComprados.Add(prod);
            listaProdutosComprados.Items.Add(prod.NomeProduto);
        }
    }

Note that the code uses the selected client in the clients listbox as the array so that the product is added to it. I also use JSON.net to save the data, and I have output the following:

[
    {
        "Nome": "João",
        "CPF": "00000000000",
        "Comprou": [
                       {
                           "NomeProduto": "Carro 4x4",
                           "ValorProduto": "R$40000"
                       }
                   ]
    }
]

The problem is that this code only adds 1 product. If I select the client and register another product for it, the product instead of being added simply overwrites the previous one. Instead of saving that way, for example:

[
    {
        "Nome": "João",
        "CPF": "00000000000",
        "Comprou": [
                       {
                           "NomeProduto": "Carro 4x4",
                           "ValorProduto": "R$40000",
                           "NomeProduto": "Moto Honda",
                           "ValorProduto": "R$20000"
                       }
                   ]
    }
]

.. it saves so overwriting the above:

[
    {
        "Nome": "João",
        "CPF": "00000000000",
        "Comprou": [
                       {
                           "NomeProduto": "Moto Honda",
                           "ValorProduto": "R$20000"
                       }
                   ]
    }
]

How to add one product followed by the other?

    
asked by anonymous 03.11.2014 / 21:59

1 answer

3

As pointed out in the comments, your code is very difficult to understand but something caught my attention as a potential problem:

procli.Comprou = new List<ProdutoComprado>
{
    new ProdutoComprado
    {
        NomeProduto = caixaProdutoComprado.Text,
        ValorProduto = caixaValor.Text
     }
};

You are always generating a new list, ideally just call:

procli.Comprou.Add(new ProdutoComprado
{
    NomeProduto = caixaProdutoComprado.Text,
    ValorProduto = caixaValor.Text
});

This way you will always be adding to the list.

Edit:

As pointed out in the comments in this answer, you need to create the list before calling the "Add" method. Ideally you should do this in the Client class constructor:

public class Cliente
{
    public Cliente()
    {
        Comprou = new List<ProdutoComprado>();
    }

    public string Nome { get; set; }
    public string CPF { get; set; }
    public List<ProdutoComprado> Comprou { get; set; }
}
    
04.11.2014 / 16:26