Я работаю над программой, которая в основном представляет собой напоминание о счете, в основном для первой программы после того, как я научился С# и WPF. Я могу попросить пользователя ввести данные, а затем сохранить их в текстовый файл. Сейчас я пытаюсь закодировать часть, которая позже загружает файл из текста. Я использовал StreamReader, чтобы прочитать текстовый файл в ArrayList, а затем выполнить итерацию по ArrayList и заполнить DataGrid. Однако что-то не работает, и я получаю пустой DataGrid, но с правильным количеством строк и столбцами с правильными заголовками. Я считаю, что проблема в том, что я использую переключатель для определения типа каждого местоположения ArrayList, а затем помещаю содержимое этого местоположения в правильный столбец, но StreamReader извлекает все в виде строки, таким образом делая переключатель бессмысленно.
Итак, в основном мой вопрос заключается в том, как заставить 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; }
}
}