Не могу понять как записать данные с DataGrid в файл txt

class List
    {
        public List(DateTime datatime, int temp, int mintemp, int deviation)
        {
            this.datatime = datatime;
            this.mintemp = mintemp;
            this.temp = temp;
            this.deviation = deviation;
        }
        public DateTime datatime { get; set; }
        public int mintemp { get; set; }
        public int temp { get; set; }
        public int deviation { get; set; }
    }
private void Button_save_Click(object sender, RoutedEventArgs e)
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            ObservableCollection<List> result = new ObservableCollection<List>();
            if (saveFileDialog.ShowDialog() == false)
            {
                return;
            }
            string path = saveFileDialog.FileName;

            using (StreamWriter sw = new StreamWriter(path))
            {
                foreach (var item in result)
                {
                    sw.WriteLine(item);
                }
            }
        }

Вот часть кода где данные записываются в datagrid

result.Add(new List(time, TempArray[i], int.Parse(MinTemp.Text), (TempArray[i] - int.Parse(MinTemp.Text))));
ResultTable.ItemsSource = result;

Ответы (1 шт):

Автор решения: aepot
  • Для начала надо понять, как эти данные в ту самую DataGrid попадают, вы ничего не показали.
  • Во-вторых переименуйте класс List, такой класс уже существует в .NET и из-за конфликта имен появляется путаница при чтении кода. К тому же почему List? У вас в классе нет ничего про списки, вот и переназовите класс как-нибудь более похожим на то, чем он является. Если это про погоду, то назовите Weather например.
  • В-третих, чтобы грузить и сохранять данные объектной модели нужна сериализация, например JSON, а не StreamWriter, но вам пока не этим надо заняться, а наведением порядка в коде.

Например, данные попадают так в таблицу:

var collection = new ObservableCollection<Weather>();
// заполняем
dataGrid1.ItemsSource = collection;

Тогда обратно их достать можно совершенно симметричным способом:

private void Button_save_Click(object sender, RoutedEventArgs e)
{
    SaveFileDialog saveFileDialog = new SaveFileDialog();
    if (saveFileDialog.ShowDialog() == false)
        return;
    if (dataGrid1.ItemsSource is ObservableCollection<Weather> collection)
    {
        string path = saveFileDialog.FileName;
        string json = JsonSerializer.Serialize(collection);
        File.WriteAllText(path, json);
    }
}

Загрузить можно так:

string json = File.ReadAllText(path);
dataGrid1.ItemsSource = JsonSerializer.Deserialize<ObservableCollection<Weather>>(json);
→ Ссылка