Евгений Колесников преди 10 месеца
родител
ревизия
cdaa602c40
променени са 1 файла, в които са добавени 13 реда и са изтрити 8 реда
  1. 13 8
      articles/lab_wpf_data_csv.md

+ 13 - 8
articles/lab_wpf_data_csv.md

@@ -1,11 +1,13 @@
 # Получение данных из внешних источников. CSV.
 
+## Реализация поставщика данных из CSV файла
+
 1. Для начала создаём файл с данными для импорта. Я продолжаю тему *кошек*, вы реализуете свою предметную область:
 
     >Мы должны уметь работать с разными типами данных, поэтому я добавил в исходные данные тип **Date** (дата прививки). Формат даты имеет множество разных форматов, но при экспорте обычно используют SQL формат (`yyyy-mm-dd`)
 
     ```csv
-    age,breed,color,name,photo,dateOfLastVaccination
+    age,breed,color,name,photo,dateOfVaccination
     1,"Дворняжка","Белый","Ириска",,2024-04-29
     2,"Шотландская вислоухая","Коричневый","Изи",,2020-01-31
     3,"Сиамский","Цветной","Макс",,2022-05-10
@@ -18,7 +20,7 @@
 
     Файл сохраняем в подкаталог `bin/debug/net8.0-windows` вашего проекта - туда, где создается исполняемый (.exe) файл (название зависит от версии .NET и платформы).
 
-1. Правим модель (у нас добавилось свойство "Дата последней прививки")
+1. Правим модель (у нас добавилось свойство "Дата  прививки")
 
     ```cs
     public class Cat
@@ -30,10 +32,12 @@
         public string breed { get; set; }
         public string photo { get; set; }
         // новое свойство
-        public DateOnly dateOfLastVaccination { get; set; }  
+        public DateOnly dateOfVaccination { get; set; }  
     }
     ```
 
+    Обратите внимание, я использую тип данных **DateOnly** - это дата без времени
+
 1. Загружаем данные из файла в класс поставщика данных
 
     >Тут есть два варианта: либо каждый раз загружать данные при вызове метода **getCats**, либо загрузить один раз при создании экземпляра класса (в конструкторе). Оба варианта имеют право на жизнь: первый имеет смысл применять, если данные часто меняются, второй, если данные статичны. Я реализую второй вариант.
@@ -47,7 +51,7 @@
         Но в то же время они и "слишком умная", если данные не соответсвуют модели (не хватает полей) или типу (например, в дате нет времени), то запись игнорируется
 
         ```cs
-        public class SCVDataProvider : IDataProvider
+        public class СSVDataProvider : IDataProvider
         {
             private List<Cat> catList;
 
@@ -89,11 +93,12 @@
         CatList = Globals.dataProvider.getCats();
     }
     ```
+---
 
-# ЗАДАНИЕ
+## ЗАДАНИЕ
 
-1. Подготовить набор данных (не менее 10 записей) с разными типами (обязательно должны быть: Int, Double, String, DateTime, Boolean)
+1. Подготовить набор данных из вашей предметной области (не менее 10 записей) с разными типами (обязательно должны быть: **Int**, **Double**, **String**, **DateTime**, **Boolean**)
 
-1. Реализовать класс CSVDataProvider для своей предметной области
+1. Реализовать класс **CSVDataProvider** для своей предметной области
 
-1. Поле с датой добавить в таблицу и указать формат вывода: `Binding="{Binding YourColumn,StringFormat='dd.MM.yyyy'}"`
+1. Все поля вывести в **ListBox**-e. Для даты указать формат вывода: `Binding="{Binding dateOfVaccination,StringFormat='dd.MM.yyyy'}"` (не помню, проверял ли я такой вариант, если не заработает, то используйте вариант с переопределением метода _ToString_)