Как проверить дубликаты и обновить элемент в списке по определенному индексу - PullRequest
0 голосов
/ 31 мая 2018

У меня есть список, в который добавляются выбранные товары с их именами и ценами.Теперь я хочу проверить, находится ли мой выбранный элемент в списке, если да, то замените его цену и удвойте его.

Я могу проверить дубликаты, но не могу обновить цену.

    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;

            if (CheckProductInListBox(details.Name))
            {
                 // what to do ?


            }
            else
            {
                listBox1.Items.Add(details.Name.PadRight(30) + details.Price.ToString());
}

    }


private bool CheckProductInListBox(string name)
        {
            foreach (string item in listBox1.Items)
            {
                if (item.Contains(name))
                {
                    return true;
                }
            }
            return false;
        }

1 Ответ

0 голосов
/ 31 мая 2018

Если вы используете свою функцию для поиска и возврата существующего элемента (при необходимости, пустой строки, если элемент не найден), то вы можете работать в обратном направлении оттуда.

Принятие имени элемента и добавление отступоввсегда будет одинаковым, вы можете просто удалить его из существующего элемента и оставить строковое значение цены.Это может быть легко проанализировано до десятичного значения, затем цена может быть добавлена ​​к существующему итогу для получения нового итога.

Затем, используя этот новый итог и то же имя, что и раньше, вы просто заменяете элемент с текущим индексом на обновленную строку.

Обратите внимание, что это не самый чистый и самыйэлегантное решение, поскольку для этого потребуется переработать весь ваш подход к взаимодействию элементов пользовательского интерфейса и данных.

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;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...