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

时间:2018-05-01 01:27:22

标签: c# winforms

我的项目

enter image description here

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

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

1 个答案:

答案 0 :(得分:0)

到目前为止,我得到了你的关注!您有一个表单,您可以在其中添加评论。您在添加评论后很快就会关闭它。但是,当您再次访问该表单时,您需要以前的所有评论。

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

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

对于这种方法,我建议实施MVVM架构 至少你应该创建一个静态存储所有数据的类 (为什么是静态的?这是一个有趣的问题,我将它留给你找出答案)

模型示例代码:

forall a. Monoid (t a)

添加评论表格的示例代码:

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

最后,在关闭整个应用程序时,最后存储 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); } } 的更新副本(序列化它)。