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());
}
}
4 réponses
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();
}
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.ToString());
}
}
label7.Text = sum.ToString();
}
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;
}
}
}
}
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()
De nouvelles questions
c#
C # (prononcé "see sharp") est un langage de programmation multi-paradigme de haut niveau, typé statiquement développé par Microsoft. Le code C # cible généralement la famille d'outils et d'exécutions Microsoft .NET, notamment le .NET Framework, .NET Core et Xamarin. Utilisez cette balise pour les questions sur le code écrit en C # ou en spécification formelle de C #.