Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Привязка даты






При привязке даты ставится задача для невыделенной ячейки представлять дату в виде цифр дня, месяца и года, разделенных точками, а для выделенной ячейки – использовать класс для выбора даты.

Решение данной задачи осуществлено с помощью разработки двух шаблонов данных DataTemplate.

В первом шаблоне, для которого задан ключ DateTemplate, используется элемент управления TextBlock, свойство Text которого привязывается к атрибуту BirstDate таблицы Employee. Данные в привязке форматируются свойством StringFormat и строковые данные выравниваются по центру. Этот шаблон используется для визуализации данных в режиме их просмотра.

< DataTemplate x: Key=" DateTemplate" > < TextBlock Text=" {Binding BirstDate, StringFormat={}{0: dd\.}{0: MM\.}{0: yyyy}}" VerticalAlignment=" Center" HorizontalAlignment=" Center" /> < /DataTemplate>

Второй шаблон с ключом EditingDateTemplate использует класс DatePicker. Этот шаблон используется в режиме редактирования данных.

< DataTemplate x: Key=" EditingDateTemplate" > < DatePicker SelectedDate=" {Binding BirstDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> < /DataTemplate>

Разработанные шаблоны необходимо добавить к ресурсам в XAML-документ страницы PageEmployee.

Для настройки колонки " Дата рождения" модифицируем её XAML-описание.

< DataGridTemplateColumn Header=" Дата рождения" CellTemplate=" {StaticResource DateTemplate}" CellEditingTemplate=" {StaticResource EditingDateTemplate}" />

Невыделенную ячейку колонки (CellTemplate) свяжите с ресурсом DateTemplate, а редактируемую ячейку (CellEditingTemplate) – с ресурсом EditingDateTemplate.

Ячейка столбца для отображения даты типа DataGridTemplateColumn имеет три представления (рис. 6.17). Если ячейка не выделена, то представление обычное текстовое (рис. 6.17а). При выделении ячейки прорисовывается свернутое содержание класса DatePicker (рис. 6.17б). При щелчке на ячейке появляется календарь (рис. 6.17в).


Рис. 6.17. Отображение даты в сетке DataGrid

Задание 5. Разработать методы манипулирования данными – 4 часа.

Для редактирования данных в приложении модифицируйте метод EditCommandBinding_Executed

private void EditCommandBinding_Executed(object sender, ExecutedRoutedEventArgs e){ DataGridEmployee.IsReadOnly = false; DataGridEmployee.BeginEdit(); isDirty = false;

Свойству IsReadOnly сетки DataGridEmployee присвойте значение false, что обеспечит возможность редактирования строк и ячеек сетки. Далее используйте метод BeginEdit для начала редактирования ячейки, на которую наведен указатель мыши.

Результаты редактирования необходимо сохранить в базе данных. Для этого необходимо вызвать метод SaveCommandBinding_Executed.

private void SaveCommandBinding_Executed(object sender, ExecutedRoutedEventArgs e){ dataEntitiesEmployee.SaveChanges(); isDirty = true; DataGridEmployee.IsReadOnly = true; }

В методе SaveCommandBinding_Executed вызывается метод SaveChanges класса dataEntitiesEmployee. Метод SaveChanges сохраняет все обновления в источнике данных.

Для создания новых данных модифицируйте метод NewCommandBinding_Executed.

Например:

private void NewCommandBinding_Executed(object sender, ExecutedRoutedEventArgs e){ Employee employee = Employee.CreateEmployee(-1, " не задано", " не задано", " не задано", 0); employee.Telephone = " не задано"; employee.Email = " не задано"; try { DataEntitiesEmployee.Employees.AddObject(employee); ListEmployee.Add(employee); isDirty = false; } catch (DataServiceRequestException ex) { throw new ApplicationException(" Ошибка добавления данных" + ex.ToString()); }}

В методе NewCommandBinding_Executed объект employee класса Employee создается с помощью метода CreateEmployee. В блоке try... catch созданный объект employee добавляется в контекст данных методом AddObject сущности Employees EDM-модели DataEntitiesEmployee, а также в коллекцию ListEmployee.

При инициализации команды создания данных в сетке формируется первоначальная строка с данными " по умолчанию". В сформированную строку необходимо ввести реальные данные сохранить их, вызвав команду " Сохранить".

Для удаления данных по сотруднику используем метод DeleteCommandBinding_Executed.

private void DeleteCommandBinding_Executed(object sender, ExecutedRoutedEventArgs e){ Employee emp = DataGridEmployee.SelectedItem as Employee; if (emp! = null) { MessageBoxResult result = MessageBox.Show(" Удалить данные ", " Предупреждение", MessageBoxButton.OKCancel); if (result == MessageBoxResult.OK) { DataEntitiesEmployee.DeleteObject(emp); DataGridEmployee.SelectedIndex = DataGridEmployee.SelectedIndex == 0? 1: DataGridEmployee.SelectedIndex - 1; ListEmployee.Remove(emp); DataEntitiesEmployee.SaveChanges(); } } else { MessageBox.Show(" Выберите строку для удаления"); }}

В методе определяется объект emp класса Employee, который выделен в сетке DataGridEmployee.

Если объект emp найден, то с помощью диалогового окна класса MessageBoxResult выводится сообщение с данными, которые предполагается удалить.

При подтверждении операции удаления объект emp удаляется из контекста методом DeleteObject.

DataEntitiesEmployee.DeleteObject(emp);

Объект emp удаляется из коллекции ListEmployee.

ListEmployee.Remove(emp);

Изменения вносятся в базу данных.

DataEntitiesEmployee.SaveChanges();

Метод UndoCommandBinding_Executed реализует отмену редактирования последних элементов сетки DataGridEmployee и переводит её в режим просмотра.

Для реализации данной функциональности необходимо провести изменения в коде приложения. Для метода Page_Loaded основной код выделите в метод GetEmployees.

private void GetEmployees(){ ObjectQuery< Employee> employees = DataEntitiesEmployee.Employees; var queryEmployee = from employee in employees orderby employee.Surname select employee; foreach (Employee emp in queryEmployee) { ListEmployee.Add(emp); } DataGridEmployee.ItemsSource = ListEmployee; }

С учетом созданного метода GetEmployees метод Page_Loaded будет иметь следующий вид.

private void Page_Loaded(object sender, RoutedEventArgs e){ GetEmployees(); DataGridEmployee.SelectedIndex = 0; }

Создайте метод RewriteEmployee, который будет обновлять контекст данных и коллекцию ListEmployee.

private void RewriteEmployee(){ DataEntitiesEmployee = new TitlePresonalEntities(); ListEmployee.Clear(); GetEmployees(); }

С учетом проведенных модификаций кода метод UndoCommandBinding_Executed будет иметь следующий вид.

private void UndoCommandBinding_Executed(object sender, ExecutedRoutedEventArgs e){ RewriteEmployee(); DataGridEmployee.IsReadOnly = true; isDirty = true; }

При запуске команды Отмена будет отменено редактирование в текущей ячейке сетки, а если редактировались несколько ячеек, то при повторном запуске команды будет обновлена вся строка.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.