Как получить конкретный символ в списке

У меня есть список, в котором мои выбранные продукты хранятся вот так ...

'Название продукта'. Padright (30) 'цена' количество '

listBox1.Items.Add(details.Name.PadRight(30) + details.Price.ToString() + " " + 1 );

но когда я читаю цену продукта, он выбирает цену и количество

string currentPriceString = foundItem.Replace(details.Name.PadRight(30), "");

string quantityString = foundItem.Replace(details.Name.PadRight(33), "");

Мне нужна только цена в currentPriceString и количество в quantityString

вот полный код этого метода

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;
        string quantityString = foundItem.Replace(details.Name.PadRight(33), "");
        int quantiy;
        MessageBox.Show(currentPriceString);

        if (Decimal.TryParse(currentPriceString, out currentPriceValue))
        {
            quantiy = Convert.ToInt16(quantityString);

            currentPriceValue += price;
            quantiy++;
            string newItem = details.Name.PadRight(30) + currentPriceValue.ToString()  + quantiy.ToString();

            int index = listBox1.Items.IndexOf(foundItem);
            listBox1.Items[index] = newItem;

        }
        else
        {
            MessageBox.Show("Error");
        }

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

private string CheckProductInListBox(string name)
{
    foreach (string item in listBox1.Items)
    {
        if (item.Contains(name))
        {
            return item;
        }
    }
    return String.Empty;
}

Из вики-страницы тега visual-studio: "Используйте этот тег, если у вас есть конкретный вопрос о функциях и возможностях Visual Studio. НЕ используйте этот тег в вопросах, касающихся кода, который просто случайно был написан в Visual Studio. Рассмотрите возможность пометки точной технологической области вашего вопроса ссылки на более конкретную версию Visual Studio, а также теги к ней. Укажите в своем вопросе точную версию VS, выпуск и уровень обновления ".

Llama 09.06.2018 12:31

Не могли бы вы поделиться одним примером значения foundItem?

Chetan Ranpariya 09.06.2018 12:49

он возвращает название продукта, которое уже существует в списке

user9754052 09.06.2018 13:03

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

Charles May 09.06.2018 13:23

Другой вариант, который упростил бы задачу, - использовать просмотр списка и иметь столбцы для каждого из ваших значений, которые вы в настоящее время объединяете в список. Гораздо чище выглядит ИМО.

Charles May 09.06.2018 14:15

Вы ищете DataGridView

Reza Aghaei 09.06.2018 15:27

Вы пробовали string currentPriceQuantityString = foundItem.Replace(details.Name.PadRight(30), "");, затем string[] strArray = currentPriceQuantityString.Split(), а затем string currentPriceString = strArray[0] и string quantityString = strArray[1]?

Amit 09.06.2018 18:46

Это просто неправильный путь. ListBox - это гаджет для отображения информации, всегда стремящийся разделить данные и представление. Вам просто нужен List<detail>, чтобы отслеживать все свойства элемента в коробке. Также следующий шаг, чтобы воспользоваться преимуществами привязки данных.

Hans Passant 09.06.2018 20:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
217
1

Ответы 1

При замене (foundItem.Replace(details.Name.PadRight(33), "");) вы просто удаляете часть имени из строки, поэтому цена и количество точно будут там.

Вы можете попробовать этот код,

// suppose your found text is like this,
//foundItem = "AMIT".PadRight(30) + "200" + " " + "1";

Вы можете узнать цену и количество отдельно, как показано ниже:

string currentPriceQuantityString = foundItem.Replace(details.Name.PadRight(30), "");
//currentPriceQuantityString => "200 1"

string[] strArray = currentPriceQuantityString.Split();

string currentPriceString = strArray[0]; //currentPriceString => "200"
string quantityString = strArray[1];     //quantityString => "1"

Примечание:

Думаю, твоя строчка:

listBox1.Items.Add(details.Name.PadRight(30) + details.Price.ToString() + " " + 1 );

..должно быть:

listBox1.Items.Add(details.Name.PadRight(30) + details.Price.ToString() + " " + "1" );

Другие вопросы по теме