Je suis débutant et j'essaye de créer un inventaire simple pour notre future entreprise :)

Comment puis-je résoudre ce problème?

Je veux calculer le prix lorsque je clique sur chaque bouton de ma liste.

Exemple:

Lorsque j'ajoute des articles et que le prix est 6, il s'affiche en bas (Total) 6 et lorsque j'en ajoute un autre et que le prix est 7 est ajouté à 6 afin que le total sera 13 que puis-je faire à ce scénario puis-je utiliser foreach ou quelque chose ou je révise mon code? aidez les gars merci :)

entrez la description de l'image ici

private void button4_Click(object sender, EventArgs e)
{
    int sum = 0;
    if (listBox1.Items.Count >= 0)
    {
        listBox1.Items.Add(dataGridView1.CurrentRow.Cells[0].Value.ToString() + "                 " + dataGridView1.CurrentRow.Cells[1].Value.ToString() + "                                                      " + Convert.ToInt32(dataGridView1.CurrentRow.Cells[2].Value.ToString()) + "                        " + Convert.ToInt32(dataGridView1.CurrentRow.Cells[3].Value.ToString()));
        sum += Convert.ToInt32(dataGridView1.CurrentRow.Cells[3].Value.ToString());

    }
    label7.Text = sum.ToString();
}

Et je ne peux pas déduire lorsque j'annule la liste de transaction

private void button6_Click(object sender, EventArgs e)
{
    if (listBox1.SelectedIndex != -1)
    {
        listBox1.Items.RemoveAt(listBox1.SelectedIndex);
        sum -= Convert.ToInt32(dataGridView1.CurrentRow.Cells[3].Value.ToString());
    } 
}
0
Landel 15 nov. 2017 à 08:51

4 réponses

Meilleure réponse

Vous utilisez int sum = 0; dans l'événement de clic de bouton. Par conséquent, chaque fois que vous cliquez sur le bouton, la somme sera définie par défaut sur 0.

Définissez int sum = 0; comme déclaration globale, puis essayez.

Quelque chose comme ci-dessous:

int sum = 0;
private void button4_Click(object sender, EventArgs e)
    {

        if (listBox1.Items.Count >= 0)
        {
            listBox1.Items.Add(dataGridView1.CurrentRow.Cells[0].Value.ToString() + "                 " + dataGridView1.CurrentRow.Cells[1].Value.ToString() + "                                                      " + Convert.ToInt32(dataGridView1.CurrentRow.Cells[2].Value.ToString()) + "                        " + Convert.ToInt32(dataGridView1.CurrentRow.Cells[3].Value.ToString()));
            sum += Convert.ToInt32(dataGridView1.CurrentRow.Cells[3].Value.ToString());

        }
        label7.Text = sum.ToString();
    }
2
maulik kansara 15 nov. 2017 à 05:59

Pour déduire le montant en fonction de la ligne sélectionnée de la liste, essayez ceci:

ListBox.SlectedObjectCollection TheSelectedItem = new ListBox.SlectedObjectCollection(listBox1);

TheSelectedItem = listBox1.SelectedItems; 

int sum = 0;
private void button6_Click(object sender, EventArgs e) 
{
   //also ensure that the row is selected before clicking the button that's the only way the SelectedIndex click event will fire, pass the selected row value.
if(listBox1.TheSelectedItem.Count != 0)
{
   while (listBox1.SelectedIndex != -1)
     {   
        listBox1.Items.RemoveAt(listBox1.SelectedIndex);        
        sum -= Convert.ToInt32(dataGridView1.CurrentRow.Cells[3].Value.ToSt‌​ring()); 
      }           
  }
     label7.Text = sum.ToString();         
} 
0
Sid Khanye 15 nov. 2017 à 06:39

Vous pouvez créer une nouvelle classe, par exemple, ce pourrait être Item et y ajouter quelques lignes.

class Item 
{
    public static List<Item> Inventory = new List<Item>();

    public Int32 Id { get; set; }
    public Int32 Price { get; set; }
    public String ItemName { get; set; }

    private static Int32 NextId { get; set; } = 0;
    private static Int32 TotalPrice { get; set; }

    public Item(Int32 price, String name) 
    {
        this.Price = price;
        this.ItemName = name;   
        this.Id = NextId;   

        Item.Inventory.Add(this);
        Item.TotalPrice += price;

        Item.NextId++;
        // add to listbox or anything
        // like listBox1.Items.Add($"{this.Id} | {this.ItemName} / {this.Price}");
    }

    public static Int32 GetTotalPrice()
    {
        return Item.TotalPrice;
    }

    public static void RemoveItem(Int32 Id) 
    { 
        foreach ( Item _item in Item.Inventory )
        {
            if(_item.Id.Equals(Id)) 
            {
                Item.Inventory.Remove(_item);
                break;
            }
        }
    }
}
0
Imran Ali Khan 15 nov. 2017 à 06:36

Une autre façon d'utiliser LINQ.

using System.Linq; //import this namespace
//...
//...

private void button4_Click(object sender, EventArgs e)
{
    if (listBox1.Items.Count >= 0)
    {
        listBox1.Items.Add(dataGridView1.CurrentRow.Cells[0].Value.ToString() + "                 " + dataGridView1.CurrentRow.Cells[1].Value.ToString() + "                                                      " + Convert.ToInt32(dataGridView1.CurrentRow.Cells[2].Value.ToString()) + "                        " + Convert.ToInt32(dataGridView1.CurrentRow.Cells[3].Value.ToString()));
    }
    label7.Text = listBox1.Items.OfType<int>().ToArray().Sum().ToString();
}

Vous n'avez pas à garder une trace des éléments ajoutés ou supprimés de la zone de liste dans une variable distincte - sum. Utilisez simplement l'opération LINQ sum () ci-dessous sur votre listBox chaque fois que vous souhaitez additionner les valeurs.

listBox1.Items.OfType<int>().ToArray().Sum()
0
Souvik Ghosh 15 nov. 2017 à 06:12
47300285