Как получить определенный символ в списке - PullRequest
0 голосов
/ 09 июня 2018

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

'Название продукта' .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;
}

1 Ответ

0 голосов
/ 09 июня 2018

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