public GroupPerformanceForm(Root root)
        {
            InitializeComponent();
            _root = root;

            // селектор оценок
            foreach (var item in typeof(Grade).GetEnumValues())
            {
                var value = new EnumCover()
                {
                    Item = (Grade)item
                };
                cbGrade.Items.Add(value);
            }

            // селектор предметов
            foreach (var item in _root.Matters)
            {
                cbMatters.Items.Add(item);
            }
            if (cbMatters.Items.Count > 0)
            {
                cbMatters.SelectedItem = _matter = (Matter)cbMatters.Items[0];
            }

            // селектор групп, добавляем "непустые" группы
            foreach (var item in _root.StudyGroups)
            {
                if (_root.Students.Any(x => x.IdStudyGroup == item.IdStudyGroup))
                {
                    cbStudyGroups.Items.Add(item);
                }
            }
            if (cbStudyGroups.Items.Count > 0)
            {
                cbStudyGroups.SelectedItem = _group = (StudyGroup)cbStudyGroups.Items[0];
            }

            // селектор семестров
            _semester = root.Semesters.FirstOrDefault(x => x.Number == 1);
            foreach (var item in _root.Semesters)
            {
                cbSemesters.Items.Add(item);
            }
            cbSemesters.SelectedItem = _semester;

            panel1.Enabled = _semester != null;

            cbMatters_SelectionChangeCommitted(null, new EventArgs());
        }
        private void lvPerformance_MouseMove(object sender, MouseEventArgs e)
        {
            var item = lvPerformance.GetItemAt(e.Location.X, e.Location.Y);

            if (item == null)
            {
                cbGrade.Visible           = false;
                lvPerformance.FocusedItem = null;
                return;
            }
            var rect = lvPerformance.GetItemRect(item.Index, ItemBoundsPortion.ItemOnly);

            rect.Offset(lvPerformance.Columns[0].Width + lvPerformance.Columns[1].Width + 2, 0);
            rect.Width = lvPerformance.Columns[2].Width;
            if (rect.Contains(e.Location))
            {
                cbGrade.Location = rect.Location;
                cbGrade.Width    = rect.Width;
                cbGrade.Visible  = true;
                var performance = (Performance)item.Tag;
                lvPerformance.FocusedItem = item;
                cbGrade.Tag = performance;
                var cover = new EnumCover {
                    Item = performance.Grade
                };
                foreach (var m in cbGrade.Items.Cast <EnumCover>())
                {
                    if (m.Item.ToString() == cover.Item.ToString())
                    {
                        cbGrade.SelectedItem = m;
                    }
                }
            }
            else
            {
                cbGrade.Visible = false;
            }
        }