Brandon Jones
Brandon Jones

Reputation: 13

Trying to populate textbox and listview from txt file

I'm able to save the textbox text and the listview items to a txt file properly by using:

private void saveToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (saveFileDialog1.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
        {
            using (StreamWriter writer = new StreamWriter(saveFileDialog1.FileName))
            {
                //writer.WriteLine(accountText.Text);
                writer.WriteLine(accountText.Text);

                if (transactionList.Items.Count > 0)
                {
                    foreach (ListViewItem item in transactionList.Items)
                    {
                        StringBuilder newString = new StringBuilder();
                        foreach (ListViewItem.ListViewSubItem listSub in item.SubItems)
                        {
                            newString.Append(string.Format("{0}\t", listSub.Text));
                        }
                        writer.WriteLine(newString.ToString());
                    }
                    writer.WriteLine();
                }
            }
        }
    }

However, I'm only able to load the textbox and can't seem to get the listview to populate. Here's what I have for that so far:

private void openToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (openFileDialog1.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
        {
            using (StreamReader reader = new StreamReader(openFileDialog1.FileName))
            {
                accountText.Text = reader.ReadLine();

               if (transactionList.Items.Count == 0)
               {
                   foreach (ListViewItem item in transactionList.Items)
                   {
                       StringBuilder myString = new StringBuilder();
                       foreach (ListViewItem.ListViewSubItem listSub in item.SubItems)
                       {
                           myString.Append(string.Format("{0}\t", listSub.Text));
                       }
                       reader.Read();
                   }
                   reader.ReadToEnd();
               }
            }
        }
    }

Any tips would be appreciated.

Upvotes: 1

Views: 527

Answers (3)

Manoj Pedvi
Manoj Pedvi

Reputation: 169

You just need to split string by '\t' character, it will return string[]. Then just add these array items to listview.

string[] items = reader.ReadLine().Split('\t');
foreach (var item in items)
{
    var listViewItem = new ListViewItem(item);
    transactionList.Items.Add(listViewItem);    
}

Upvotes: 1

Orifjon
Orifjon

Reputation: 1097

You need to reverse all your actions while reading

private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (openFileDialog1.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
    {
        using (StreamReader reader = new StreamReader(openFileDialog1.FileName))
        {
            accountText.Text = reader.ReadLine();

               while(!reader.EndOfStream)
               {
                   var myString = reader.ReadLine();
                   var subitems = myString.Split("\t");
                   // Create ListItem and assign subItems here...
                   transactionList.Items.Add(new ListviewItem(subitems));
               }
           }
        }
    }
}

Upvotes: 0

Simon Verbeke
Simon Verbeke

Reputation: 3005

As far as I can tell you're not putting the string into the ListView.

You will want to to do something like this:

foreach (ListViewItem.ListViewSubItem listSub in item.SubItems)
{
    myString.Append(string.Format("{0}\t", listSub.Text));
    listSub.Text = myString.ToString();
}

Upvotes: 0

Related Questions