Search code examples
c#arraysfilereaderstreamreader

C# Multiplying the values of an array together which are loaded from a textfile into a List<>


So I have an array, strArray, that stores the values of my text files which has 3 columns. I think this is called a two or three dimensional array, not sure. Or maybe one dimensional. I have a List<> called Inventory which adds the data to it.

I currently have three successful columns I just need the fourth. The fourth column is the second and third column multiplied together, which is a total price. The second column is an int, "Number of Items", the third is a decimal, "Price" and the fourth is a decimal, "Total Price" which is Number of Items * Price.

I'll go ahead and post my code, I am also using four list boxes for the data. Three columns (or three list boxes) work fine, but I just gotta get the fourth one figured out.

Sorry for the large amount of code, I figured if I copied all of it it'll make it easier to see if an error occurred earlier on. btnLoadInfo_Click is the event/method where the main issue is.

namespace TCSCapstone
{
public partial class frmInventory : Form
{
    List<frmInventory> Inventory = new List<frmInventory>();

    public frmInventory()
    {
        InitializeComponent();
    }

    public string ItemName { get; set; }
    public int NumberOfItems { get; set; }
    public decimal Price { get; set; }
    public decimal TotalPrice { get; set; }

    string selectedList = "";

    private void cmbList_SelectedIndexChanged(object sender, EventArgs e)
    {
        selectedList = this.cmbList.GetItemText(this.cmbList.SelectedItem);

        lstItemName.DataSource = null;
        lstNumberOfItems.DataSource = null;
        lstPrice.DataSource = null;

        lstItemName.Items.Clear();
        lstNumberOfItems.Items.Clear();
        lstPrice.Items.Clear();
        lstTotalPrices.Items.Clear();

        if (selectedList == "Creative Construction")//if the selected combo box item equals the exact string selected
        {
            selectedList = "creative"; //then the string equals creative, which is creative.txt but I add the .txt in the btnLoadInfo method
        } else if (selectedList == "Paradise Building")
        {
            selectedList = "paradise";//this is for paradise.txt
        }
        else if (selectedList == "Sitler Construction")
        {
            selectedList = "sitler";//this is for sitler.txt
        }
        else
        {
            MessageBox.Show("Please select one of the items.");
        }
    }`



        private void btnLoadInfo_Click(object sender, EventArgs e)
    {
        Inventory.Clear(); //Clears the entire Inventory List

         using (StreamReader invReader = new StreamReader(selectedList + 
 ".txt"))
         {
             while (invReader.Peek() >= 0)
             {
                 string str;
                 string[] strArray;
                 str = invReader.ReadLine();

                 strArray = str.Split(',');
                 frmInventory currentItem = new frmInventory();

                 currentItem.ItemName = strArray[0];
                 currentItem.NumberOfItems = int.Parse(strArray[1]);
                 currentItem.Price = 
 decimal.Parse(strArray[2]);

                 strArray[1].
                 currentItem.TotalPrice = decimal.Parse(strArray[1] * 
strArray[2]);

                 Inventory.Add(currentItem);

             }
         }


         displayLists(); //Calls the displayLists method to update list 
//boxes at the end of the button click event
     }//end of btnLoadInfo

     void displayLists()
     {
         //Resets the listboxes datasources by setting them to null
         lstItemName.DataSource = null;
         lstNumberOfItems.DataSource = null;
         lstPrice.DataSource = null;

         lstItemName.Items.Clear();
         lstNumberOfItems.Items.Clear();
         lstPrice.Items.Clear();
         lstTotalPrices.Items.Clear();

         lstItemName.DisplayMember = "ItemName";
         lstItemName.ValueMember = "";
         lstItemName.DataSource = Inventory;

         lstNumberOfItems.DisplayMember = "NumberOfItems";
         lstNumberOfItems.ValueMember = "";
         lstNumberOfItems.DataSource = Inventory;

         lstPrice.DisplayMember = "Price";
         lstPrice.ValueMember = "";
         lstPrice.DataSource = Inventory;
     }

Solution

  • You're trying to multiply two strings together. Instead, multiply the numeric values that you have already parsed:

    currentItem.TotalPrice = currentItem.NumberOfItems * currentItem.Price;