У меня проблема с ListView при сохранении имен - PullRequest
0 голосов
/ 03 марта 2020

У меня есть список с именем, фамилией, идентификатором пользователя ... И чтобы добавить пользователя, я использую текстовые поля и кнопку добавления, и вот, где возникает проблема. StreamWriter сохраняет «текстовые поля», а не «элементы ListView», поэтому, если я оставлю текстовые поля пустыми, в моем файле останется пустая строка (.txt). Как я могу сделать так, чтобы потоковая запись сохраняла элементы ListView? Надеюсь, это имеет смысл: D

Код:

  private void buttonAddNewUser_Click (object sender , EventArgs e)
    {
        if (string.IsNullOrEmpty (firstName) || string.IsNullOrEmpty (lastName) || 
              string.IsNullOrEmpty (userID)) return;
        {
            ListViewItem dataItems = new ListViewItem (firstName);
            dataItems.SubItems.Add (lastName);
            dataItems.SubItems.Add (userID);
            listView1.Items.Add (dataItems);
        }

    }

    private void btnSaveToFile_Click (object sender , EventArgs e)
    {
        if (File.Exists (@"D:\PersonsSaved.txt"))
        {
            string fullName = firstName + "," + lastName + "," + userID;
            using (var writer = new StreamWriter (@"D:\PersonsSaved.txt" , true))
            {
                writer.WriteLine (fullName);

                MessageBox.Show ("User(s) has been saved!");

            }
        }
    }

    private void Form1_Load (object sender , EventArgs e)
    {
        string fileLocation = @"D:\PersonsSaved.txt";
        List<string> userData = File.ReadAllLines (fileLocation).ToList ();

        foreach (var item in userData)
        {
            string[ ] items = item.Split (new char[ ] { ',' });
            listView1.Items.Add (new ListViewItem (items));
        }


    }

    private void textBoxFirstName_TextChanged (object sender , EventArgs e)
    {
        firstName = textBoxFirstName.Text;
    }

    private void textBoxLastName_TextChanged (object sender , EventArgs e)
    {
        lastName = textBoxLastName.Text;
    }

    private void textBoxUserID_TextChanged (object sender , EventArgs e)
    {
        userID = textBoxUserID.Text;
    }

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Вы можете l oop просмотреть каждый элемент списка и сохранить его:

private void saveBtn_Click(object sender, EventArgs e)
{
    using (var writer = new StreamWriter(@"D:\PersonsSaved.txt", true))
    {
        foreach (ListViewItem item in listView1.Items)
        {
            string fullName = $"{item.Text},{item.SubItems[1].Text},{item.SubItems[2].Text}";
            writer.WriteLine(fullName);
        }
    }
}
0 голосов
/ 03 марта 2020

Вы можете добавить логи c, чтобы увидеть, что находится в коробках

private void btnSaveToFile_Click (object sender , EventArgs e)
{
  if (File.Exists (@"D:\PersonsSaved.txt"))
  {
    if (firstName.Length + lastName.Length + userID.Length > 0)
    {
      string fullName = firstName + "," + lastName + "," + userID;
      using (var writer = new StreamWriter (@"D:\PersonsSaved.txt" , true))
      {
        writer.WriteLine (fullName);

        MessageBox.Show ("User(s) has been saved!");
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...