【发布时间】:2011-07-29 03:00:05
【问题描述】:
我正在开发一个基本上是账单提醒的程序,主要是在自学 C# 和 WPF 之后的第一个程序。我可以让用户输入详细信息,然后将其保存到文本文件中。我现在正在尝试编写稍后从文本加载文件的部分。我使用 StreamReader 将文本文件读入 ArrayList,然后让程序遍历 ArrayList 并填充 DataGrid。虽然有些东西不起作用,我最终得到一个空白的 DataGrid,但行数和列标题正确。我认为问题在于我使用 switch-case 来确定每个 ArrayList 位置的类型,然后将该位置的内容放在正确的列中,但是 StreamReader 将所有内容作为字符串拉入,从而使 switch-case毫无意义。
所以基本上我的问题是,我如何让 StreamReader 将项目放置在正确的值类型中,或者这甚至是问题所在?
这是我正在使用的代码。尽管它实际上不是预算程序,但我只是将其用作测试平台,因此我不会“污染”我的好代码。 :) 这些值是完全相同的值类型,所以一旦它工作并转移它,它将完成我需要它做的一切。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ArrayList array = new ArrayList();
DataGridTextColumn nameOfPerson = new DataGridTextColumn();
nameOfPerson.Binding = new Binding("name");
DataGridTextColumn ageOfPerson = new DataGridTextColumn();
ageOfPerson.Binding = new Binding("age");
DataGridTextColumn birthdayOfPerson = new DataGridTextColumn();
birthdayOfPerson.Binding = new Binding("birthday");
DataGridTextColumn netWorth = new DataGridTextColumn();
netWorth.Binding = new Binding("netWorth");
using (StreamReader reader = new StreamReader("ArrayListSource.txt"))
{
while (!reader.EndOfStream)
{
array.Add(reader.ReadLine());
}
}
//Array is now populated with contents of text file.
string name;
int age;
DateTime birthday;
decimal value;
//Checks the type of each entry in the array.
for (int i = 0; i < array.Count; i++)
{
System.Type idType = array[i].GetType();
string currentItem = idType.Name;
switch (currentItem)
{
case "String":
name = (string)array[i];
dataGrid1.Items.Add(new PersonInfo() { nameOfPerson = name });
break;
case "Int32":
age = (int)array[i];
dataGrid1.Items.Add(new PersonInfo() { ageOfPerson = age });
break;
case "DateTime":
birthday = (DateTime)array[i];
dataGrid1.Items.Add(new PersonInfo() { birthdayOfPerson = birthday });
break;
case "Decimal":
value = (decimal)array[i];
dataGrid1.Items.Add(new PersonInfo() { netWorth = value });
break;
}
dataGrid1.Columns.Add(nameOfPerson);
dataGrid1.Columns.Add(ageOfPerson);
dataGrid1.Columns.Add(birthdayOfPerson);
dataGrid1.Columns.Add(netWorth);
nameOfPerson.Header = "Name";
ageOfPerson.Header = "Age";
birthdayOfPerson.Header = "Birthdate";
netWorth.Header = "Net Worth";
}
public struct PersonInfo
{
public string nameOfPerson { get; set; }
public int ageOfPerson { get; set; }
public DateTime birthdayOfPerson { get; set; }
public decimal netWorth { get; set; }
}
}
【问题讨论】:
-
尝试使用 WPF DataGrid 作为您的第一次真正尝试?你很勇敢。 :)
-
我开始意识到这一点,但它做了我想要的。 :)
标签: c# .net wpf wpfdatagrid streamreader