Не могу понять как записать данные с 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);