Метод и задает фильтр для отображения только нужных записей из таблицы Student. Если CheckBox отмечен, то задаем пустой фильтр, означающий, что необходимо показать все записи без исключения. В противном случае, нам необходимо отобразить студентов только выбранной группы. Для этого, во-первых, проверяем, если не выбрана никакая группа, то нам необходимо заблокировать весь GroupBox, чтобы пользователь не мог с ним взаимодействовать. Далее мы пытаемся определить первичный ключ выбранной группы: объявляем переменную GroupID и задаем ей значение по умолчанию – 1 на случай, если никакая группа не выбрана в DataGridView, если группа выбрана, то получаем ее ID. Для этого из объекта groupBindingSource
получаем значение Current, указывающее на текущего выбранного студента, однако это свойство имеет тип object, поэтому мы должны его привести к типу DataRowView, затем обратится к его свойству Row, который в свою очередь привести к типу dsSample.GroupRow – типизированный объект Row, т.е. строка принадлежащая таблице Group и содежащая описания ее полей. И уже из объекта GroupRow мы получаем значение GroupID
и помещаем его в локальную переменную. Теперь мы готовы сформировать фильтр, который по своей структуре похож на секцию WHERE запросов на языке SQL: указывается условие отбора (в данном случае – это имя поля и значение, по которому ищем). В случае необходимости это условие может составным: используются логические and и or.
private void SetFilter()
{
if (checkBox1.Checked)
studentBindingSource.Filter = "";
else
{
gbStudents.Enabled = groupBindingSource.Current != null;
int GroupID = – 1;
if (groupBindingSource.Current != null)
{
GroupID = ((dsSample.GroupRow)((DataRowView)groupBindingSource.Current).Row).GroupID;
}
studentBindingSource.Filter = string.Format("groupid={0}", GroupID);
}
}
Загрузка и сохранение данных
Загрузка данных из XML файла осуществляется следующим кодом:
private void Form1_Load(object sender, EventArgs e)
{
if (File.Exists(data_xml))
dsSample1.ReadXml(data_xml);
}
Сначала проверяется наличие файла data_xml, и если такой файл есть, то данные из него читаются в DataSet.
Сохраненения данных из DataSet в XML файл происходит при закрытии формы, для этого вызывается метод WriteXml объекта DataSet, которому передается имя файла, в который необходимо сохранить данные.
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
dsSample1.WriteXml(data_xml);
}
Добавление и редактирование записей
Обработчик нажатия кнопки “Add Group”:
private void btnAddGroup_Click(object sender, EventArgs e)
{
GroupForm form = new GroupForm();
if (form.ShowDialog() == DialogResult.OK)
{
dsSample.GroupRow row = dsSample1.Group.NewGroupRow();
row.Name = form.GetGroupName();
dsSample1.Group.AddGroupRow(row);
}
}







