Если вы используете свою функцию для поиска и возврата существующего элемента (при необходимости, пустой строки, если элемент не найден), то вы можете работать в обратном направлении оттуда.
Принятие имени элемента и добавление отступоввсегда будет одинаковым, вы можете просто удалить его из существующего элемента и оставить строковое значение цены.Это может быть легко проанализировано до десятичного значения, затем цена может быть добавлена к существующему итогу для получения нового итога.
Затем, используя этот новый итог и то же имя, что и раньше, вы просто заменяете элемент с текущим индексом на обновленную строку.
Обратите внимание, что это не самый чистый и самыйэлегантное решение, поскольку для этого потребуется переработать весь ваш подход к взаимодействию элементов пользовательского интерфейса и данных.
private void ProductButton_Click(object sender, EventArgs e)
{
Button ProductButton = sender as Button;
DataAccess dataAccess = new DataAccess();
int ProductID = Convert.ToInt32(ProductButton.Tag);
Details details = dataAccess.ReadProductDetails(ProductID);
decimal price = details.Price;
string foundItem = CheckProductInListBox(details.Name);
if (!String.IsNullOrEmpty(foundItem))
{
string currentPriceString = foundItem.Replace(details.Name.PadRight(30), "");
decimal currentPriceValue;
if (Decimal.TryParse(currentPriceString, out currentPriceValue))
{
currentPriceValue += price;
string newItem = details.Name.PadRight(30) + currentPriceValue.ToString();
int index = listBox1.Items.IndexOf(foundItem);
listBox1.Items[index] = newItem;
}
else
{
//Throw error
}
}
else
{
listBox1.Items.Add(details.Name.PadRight(30) + details.Price.ToString());
}
}
private string CheckProductInListBox(string name)
{
foreach (string item in listBox1.Items)
{
if (item.Contains(name))
{
return item;
}
}
return String.Empty;
}