C# 如何在ListView中保存用户输入?

C# 如何在ListView中保存用户输入?,c#,winforms,C#,Winforms,我的项目 我想知道如何将用户输入保存在列表视图中,并防止它在转到另一个表单时消失 if (string.IsNullOrEmpty(txtName.Text) || string.IsNullOrEmpty(txtReview.Text)) return; ListViewItem item = new ListViewItem(txtName.Text); item.SubItems.Add(txtReview.Text); listView1.Items.

我的项目

我想知道如何将用户输入保存在
列表视图中,并防止它在转到另一个表单时消失

if (string.IsNullOrEmpty(txtName.Text) || string.IsNullOrEmpty(txtReview.Text))
    return;

    ListViewItem item = new ListViewItem(txtName.Text);
    item.SubItems.Add(txtReview.Text);
    listView1.Items.Add(item);
    txtName.Clear();
    txtReview.Clear();

据我所知,你的担心!您有一个表单,可以在其中添加评论。您将在添加审阅后立即关闭它。但是,当您再次访问该表单时,您需要所有以前的审阅

你们不能使用数据库(当然这是最简单的方法),但你们可以使用文件系统(你们说的是文本文件,我也假设是序列化)

但时不时地读写文件是一个代价高昂的过程,我建议您将数据保存在内存缓存中(插入新评论,更新并删除它们,如果可能的话)。关闭应用程序时,将上次更新的副本存储到文件中,启动软件时,读取该文件以获取数据的上次更新副本。 (当软件崩溃或异常停止时,这种在关闭软件时存储数据的方法可能会导致数据丢失。但由于它是类项目,我不会对此太担心。不过,您可以始终使用低优先级线程定期存储数据)

对于这种方法,我建议实现MVVM体系结构
至少应该创建一个静态存储所有数据的类 (为什么是静态的?这是一个有趣的问题,我让你自己去寻找答案)

模型的示例代码:

public class Model
{
    public static Dictionary<string, Review> ReviewData;
    //this method should be called at application startup.
    public static void SetModel()
    {
        //Desrialize lastly saved file, I'm just initializing it with new 
        ReviewData = new Dictionary<string, Review>();
    }
    public static void AddReview(string movie, string reviewerName, string review)
    {
        if (!ReviewData.ContainsKey(movie + "-" + reviewerName))
        {
            ReviewData.Add(movie + "-" + reviewerName, new Review(reviewerName, reviewerName));
        }
    }
}

public class Review
{
    public string reviewerName;
    public string review;
    public Review(string reviewerName, string review)
    {
        this.reviewerName = reviewerName;
        this.review = review;
    }
}

最后,在关闭整个应用程序时,存储最后更新的
模型副本。查看数据
(序列化)。

您使用的是数据库吗?没有,先生。在我的类项目中,我只能使用textfile作为本地保存,因为它是一个小项目。相关部分是打开另一个表单的代码。是否关闭刚插入用户输入的表单?在保存数据之前?或者数据已保存,但您不知道如何将其带回?我希望关闭表单并能够保存它,并且在返回表单时也能够将其带回您是否在转到其他表单时关闭当前表单?如果是,您的数据不能存储在表单的代码隐藏中,而是应该存储在模型类中(这样就不会丢失表单内存)。在加载表单的方法时,您应该用数据重新填充列表视图。如果您没有关闭表单(或只是隐藏表单),那么您不应该面临问题。
    private void btnPost_Click(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(txtName.Text) || string.IsNullOrEmpty(txtReview.Text))
            return;
        //First we should set Model data
        Model.AddReview("moive1", txtName.Text, txtReview.Text);
        LoadListView();
    }

    private void AddReviewForm_Load(object sender, EventArgs e)
    {
        LoadListView();
    }

    private void LoadListView()
    {
        listView1.Clear();
        foreach (string reviewKey in Model.ReviewData.Keys)
        {
            Review review = Model.ReviewData[reviewKey];
            ListViewItem item = new ListViewItem(review.reviewerName);
            item.SubItems.Add(review.review);
            listView1.Items.Add(item);
        }
    }