У меня есть список, в котором мои выбранные продукты хранятся вот так ...
'Название продукта'. 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;
}
Не могли бы вы поделиться одним примером значения foundItem?
он возвращает название продукта, которое уже существует в списке
Почему бы не создать свой собственный тип продукта, который будет содержать все эти значения. Переопределите метод ToString, чтобы он отображался в списке так, как вы хотите. Затем просто получите значения свойств из выбранного элемента, когда они вам понадобятся.
Другой вариант, который упростил бы задачу, - использовать просмотр списка и иметь столбцы для каждого из ваших значений, которые вы в настоящее время объединяете в список. Гораздо чище выглядит ИМО.
Вы ищете DataGridView
Вы пробовали string currentPriceQuantityString = foundItem.Replace(details.Name.PadRight(30), "");, затем string[] strArray = currentPriceQuantityString.Split(), а затем string currentPriceString = strArray[0] и string quantityString = strArray[1]?
Это просто неправильный путь. ListBox - это гаджет для отображения информации, всегда стремящийся разделить данные и представление. Вам просто нужен List<detail>, чтобы отслеживать все свойства элемента в коробке. Также следующий шаг, чтобы воспользоваться преимуществами привязки данных.





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