Пока не понятно, как вообще избавиться от времени, которое, очевидно, является лишним. Сложное лекарство было упомянуто ранее — при записи в файл не пользоваться методом WriteXml, а работать методами класса XmlDocument, на ходу управляя форматом даты.
Задание
¨ Добавьте возможность поиска студентов по среднему баллу, значение которого попадает в интервал [mln, max]. Добавьте элементы интерфейса для ввода границ интервала.
¨ В данный момент команды поиска отдаются с помощью кнопок на панели инструментов. Реакцию на выбор одноименных команд меню, а также отслеживание их состояний, реализуйте самостоятельно. Если сочтете нужным, задействуйте и другие команды меню.
¨ Те, кто чувствует себя уверенно, добавьте возможность выбора строки в списке ListView и синхронизации (отслеживания) позиции в активном DataGridView. Это не так просто, потому, что ListView способен отображать данные обеих таблиц. При навигации к экзамену другого (неактивного) студента необходимо синхронизировать studsGrid (прокрутить строки, выбрать строку и выделить ячейку), examsGrid при этом должен отследить позицию (перегрузиться) автоматически.
Здесь приведено одно из решений поиска студентов по среднему баллу.
void FilterAverage()
{
float low, hi;
bool ok = float.TryParse(tAverageLow.Text, out low);
ok &= float.TryParse(tAverageHi.Text, out hi);
if (!ok)
return;
// Здесь ваш код
sNotFound.Visible = false;
FillList(rows, criteria);
}
Полезно добавить возможность автоматического открытия файла последнего документа. Это должно происходить при начальном запуске приложения. Для этой цели в момент записи документа в файл мы создаем или открываем ключ Windows-реестра и запоминаем его файловый путь. Другой (более современный) способ — использовать global::Properties.Settings. Рассмотрим способ с использованием реестра.
¨ В момент записи в файл (или закрытия формы) производим запись в реестр:
RegistryKey key = Registry.CurrentUser.CreateSubKey (@"Software\MySoft\StudExam");
key.OpenSubKey ("StudExam", true);
key.SetValue ("Last File", fileName);
¨ В момент загрузки формы (в реакции на событие Load), мы обращаемся к реестру, узнаем путь к последнему файлу и открываем его.
void MainForm_Load(object sender, EventArgs e)
{
SetDesktopLocation(10, 10);
comboFind_SelectedIndexChanged (comboFind, EventArgs.Empty);
RegistryKey key = Registry.CurrentUser.OpenSubKey (@"Software\MySoft\StudExam");
fileName = null;
if (key != null && (fileName = (string)key.GetValue ("Last File")) != null)
Open (fileName);
}
Более современным подходом (вместо использования Windows-реестра) считается использование XML-файла настроек Settings.settings. Такой файл уже есть в вашем проекте, но пока не задействован.
¨ Создание и настройку компонентов BindingSource и BindingNavigator можно полностью выполнить в режиме дизайна.
Объект класса DataView не имеет своих данных, он работает с данными ассоциированного с ним объекта DataTable. Методы класса DataView позволяют преобразовать табличные данные. Их можно отфильтровать, или отсортировать. Следующий фрагмент иллюстрирует сказанное.
DataView view = new DataView(ds.Tables[0]); // Создаем образ таблицы студентов
view.RowFilter = "Name LIKE 'C*'"; // Настраиваем фильтр отбора строк
view.Sort = "Addr DESC"; // Настраиваем режим сортировки
viewGrid.DataSource = view; // Привязываем viewGrid к образу таблицы
Предполагается, что на форме есть еще один DataGridView с именем viewGrid. Последний оператор оправдывает необходимость существования классаDataView. Дело в том, что отфильтровать и отсортировать данные можно было бы с помощью метода Select класса DataTable. Для этой цели класс DataView не нужен. Но вот привязать элемент отображения (DataGridView, или ComboBox) к данным, возвращаемым методом Select, нам бы не удалось, так как привязка осуществляется с помощью свойств, а Select возвращает массив объектов DataRow[], каждый из которых можно представить в виде массива обезличенных объектов. Напомню, что класс DataRow имеет два индексатора для выбора полей данных (колонок). Вывод: DataView умеет делать все, что делает метод Select класса DataTable, но добавляет способность привязки к своим данным.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.