c# - 将参数保存在文本文件中

时间:2014-08-27 15:07:01

标签: c# .net


我正在创建一个程序,对我在列表框中添加的人员的姓名进行编目,并在关闭程序时将所有内容保存到文件中。
该文件的每一行都是针对一个人的:

Tommy
Marco
James
Dylan

程序启动时,会加载文件数据并将名称添加到列表框中 这一切都很有效,但现在我在制作其他东西方面遇到了麻烦 列表中的每个人都需要一个变量来表明它是否已付款,我想将此变量与他的名字一起保存在文件中。
为此,我有:

bool paid;
private void checkbox_Paid_CheckedChanged(object sender, EventArgs e)
{
    paid = true;
}

我只有一个复选框,根据事件中的选择,它需要与列表框中的每个人不同:

private void listDOF_SelectedIndexChanged(object sender, EventArgs e)
{

}

但我不知道如何在文件中为每个人写这个bool,将文件与名称一起保存并加载。
我尝试过类似的东西:

foreach(string purchasers in listDOF.Items)
{
    arq.WriteLine(purchases, paid);
}

显然这不起作用,我不知道如何为每个购买者分配bool并将其写入文件。
我在WFA中使用.NET 4.5 在此之前,如果我能够做到这一点,我将向知识迈出一大步。

2 个答案:

答案 0 :(得分:3)

首先,我会将这些人存放在申请表的清单中,否则您只会为申请中的所有人提供一个布尔,并且每个人都将被设置为付款或不付款。

public class Person
{
   public string Name { get; set; }
   public bool Payed { get; set; }
}

public List<Person> Persons { get; set; }

简单的方法是将其保存在SCV文件中。字段之间的分号和每个帖子的新行

Tommy; true
Marco; true

然后像这样保存

foreach(var person in Persons)
{ 
   arq.WrtieLine("{0};{1}", person.Name, person.Payed);
}

答案 1 :(得分:1)

我相信这是将您的文本文件转换为JSON的好例子。

例如:

[
  { name: "Tom", hasPaid: true },
  { name: "Matias", hasPaid: false } // Urgh!
]

在C#中,您可以使用匿名对象构建此JSON:

List<object> people = new List<object>();
people.Add(new { Name = "Tom", HasPaid = true });

最后,您可以使用JSON.NET序列化为JSON:

File.WriteAllText(@"C:\myfile.json", JsonConvert.SerializeObject(people));

...或反序列化它:

List<object> people = JsonConvert.DeserializeObject<List<object>>(File.ReadAllText(@"C:\myfile.json"));

更新

也许你应该使用一个具体的类而不是一个无趣的对象,因为后者是不可改变的,如果你需要将对象列表数据绑定到整个ListBox,你就会遇到麻烦

你可以声明一个这样的简单类:

public class Person 
{
    public string Name { get; set; }
    public bool HasPaid { get; set; }
}

......以这种方式添加人员:

List<Person> people = new List<Person>();

Person person = new Person();
person.Name = "Tom";
person.HasPaid = true;
people.Add(person);

File.WriteAllText(@"C:\myfile.json", JsonConvert.SerializeObject(people));

当涉及反序列化整个JSON数组时:

List<Person> people = JsonConvert.DeserializeObject<List<Person>(File.ReadAllText(@"C:\myfile.json"));

更新2

您似乎不知道可以将列表绑定到Windows窗体控件。请参阅示例the following MSDN article

您可以使用List<T>代替BindingList<T>Check this CodeProject guide

这样,当您向整个BindingList<T>添加项目时,ListBox控件将自动填充。如果删除一个,它也将从UI中消失。

如果您利用数据绑定(在Web开发中,例如 KnockoutJS !),Windows窗体和Windows Presentation Foundation都是强大且高效的。