【问题标题】:I have a problem with ListView when saving names保存名称时 ListView 出现问题
【发布时间】:2020-03-03 16:37:17
【问题描述】:

我有一个包含名字、姓氏、用户 ID 的列表视图... 为了添加用户,我使用文本框和添加按钮,这就是问题所在。 StreamWriter 保存“文本框”而不是“ListView 项目”,因此如果我将文本框留空,它会在我的文件 (.txt) 中存储一个空行。 我怎样才能让 streamwriter 保存 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;
    }

【问题讨论】:

  • 你需要保存listview中的每一项:foreach(ListViewItem item in listView1.Items){ // Write to file }
  • 哦!谢谢!强尼
  • @JohnnyMopp 你好,我一直在试验你给我的东西。但它并没有像我想要的那样结束。所以我做了别的东西,但在文本文件中它最终是这样的:ListViewItem:{firstname},ListViewSubItem:{lastname},ListViewSubItem:{userID}。无论如何要删除“listviewitem”
  • 最后一件事,我忘了补充一点,如果我使用你的方式,结果将是:ListViewItem: {firstname} only。也许我不明白。
  • 您需要使用Text 字段。我已经输入了答案。

标签: c# winforms listview


【解决方案1】:

您可以遍历列表视图中的每个项目并保存它:

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);
        }
    }
}

【讨论】:

    【解决方案2】:

    您可以添加一些逻辑来查看框中的内容

    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!");
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-17
      • 2023-01-30
      • 2020-05-20
      • 1970-01-01
      • 2023-02-02
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      相关资源
      最近更新 更多