Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metkurs_progr.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
700 Кб
Скачать
☆

Сортировка данных

Используя конструктор меню, создайте в компоненте menuStrip1 новый пункт меню первого уровня с текстом &Data и с помощью окна Properties измените имя этого пункта (т.е. свойство Name) наdate1. В выпадающем меню, связанном с пунктом Data, создайте пункт с текстом &Sortby…и измените имя этого пункта на sortby1. Затем перейдите в заготовку меню третьего уровня, связанную с пунктом Sortby…, добавьте в нее три пункта меню с текстом &Id, &Surname, &Course+Group и измените имена этих пунктов на id2, surname2, course2 соответственно.

В конструктор класса Form1 добавьте новые операторы:

id2.Tag = 0;

surname2.Tag = 1;

course2.Tag = 2;

В описание класса Form1 добавьте три вспомогательных метода: CompareById, CompareBySurname, CompareByCourse:

private int CompareById(student a, student b)

{

return a.Id - b.Id;

}

private int CompareBySurname(student a, student b)

{

return a.Surname.CompareTo(b.Surname);

}

private int CompareByCourse(student a, student b)

{

int res = a.Course - b.Course;

if (res == 0)

res = a.Group - b.Group;

if (res == 0)

res = a.Surname.CompareTo(b.Surname);

return res;

}

Определите обработчик события Click для пункта меню id2:

private void id2_Click(object sender, EventArgs e)

{

if (dataGridView1.RowCount == 1)

return;

dataGridView1.CurrentCell = dataGridView1[0, 0];

Comparison<student> comp = CompareById;

switch ((int)(sender asToolStripMenuItem).Tag)

{

case 1:

comp = CompareBySurname;

break;

case 2:

comp = CompareByCourse;

break;

}

(bindingSource1.DataSource asList<student>).Sort(comp);

bindingSource1.ResetBindings(false);

}

Свяжите созданный обработчик с событием Click пунктов меню surname2, course2.

Поиск по шаблону

Поиск организуется с помощью одного из перегруженных вариантов метода FindIndex обобщенного класса List<T>, а именно – варианта с двумя параметрами: номера элемента, с которого начинается поиск, и тестовой функции. Тестовая функция должна иметь один параметр типа T и возвращать логическое значение true, если ее параметр удовлетворяет критерию поиска, и false в противном случае. Параметр метода FindIndex, соответствующий тестовой функции, описывается в виде делегата-обобщения Predicate<T>.

Для организации поиска подключите к проекту библиотеку Microsoft.VisualBasic. Для этого щелкните правой кнопкой мыши на строке References в окне SolutionExplorer, выберите в появившемся контекстом меню команду AddReference. Выделите пункт Microsoft.VisualBasic, после чего нажмите кнопку OK.

В начало файла Form1.cs добавьте оператор

using Microsoft.VisualBasic;

В описание класса Form1 добавьте новое поле:

private string surnameToFind = "";

Дополните выпадающее меню, связанное с пунктом Data, добавив в него пункт с текстом &Find…, и измените имя добавленного пункта меню на find1.

Измените первый оператор метода dataGridView1_RowEnter (приведен полный вариант дополненного метода с выделенными дополнениями)

private void dataGridView1_RowEnter(object sender,

DataGridViewCellEventArgs e)

{

Find.Enabled = bindingNavigatorDeleteItem.Enabled =

!dataGridView1.Rows[e.RowIndex].IsNewRow;

}

Аналогичным образом измените первый оператор метода dataGridView1_CurrentCellDirtyStateChanged (добавьте Find.Enabled)

Определите обработчик события Click для пункта меню find1

private void find1_Click(object sender, EventArgs e)

{

surnameToFind =

Interaction.InputBox("Введите начальную часть фамилии для поиска:",

"Поиск по фамилии", surnameToFind, -1, -1).Trim();

if (surnameToFind == "")

return;

int ind = (bindingSource1.DataSource as

List<student>).FindIndex(dataGridView1.CurrentRow.Index,

delegate(student a)

{

return a.Surname.StartsWith(surnameToFind,

StringComparison.OrdinalIgnoreCase);

});

if (ind != -1)

dataGridView1.CurrentCell = dataGridView1[1, ind];

else

MessageBox.Show("Фамилия не найдена", "Поиск по фамилии");

}

В результате добавленная в меню команда Find позволяет организовать поиск студента по начальной части его фамилии. Для ввода требуемой начальной фамилии используется стандартное диалоговое окно. При отображении этого окна в нем выводится предыдущий текст для поиска. В случае, если введенный текст является пустым или содержит только пробелы, а также если диалоговое окно закрывается нажатием кнопки Cancel или клавиши <Esc>, действие команды Find отменяется, а текст для поиска полагается равным пустой строке.

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

Если текущей является последняя строка таблицы (NewRow), то команда Find недоступна.

Приложение 1. Оформление титульного листа

ПЕРВОЕ ВЫСШЕЕ ТЕХНИЧЕСКОЕ УЧЕБНОЕ ЗАВЕДЕНИЕ РОССИИ

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«НАЦИОНАЛЬНЫЙ МИНЕРАЛЬНО-СЫРЬЕВОЙ УНИВЕРСИТЕТ «ГОРНЫЙ»

Кафедра информационных систем и вычислительной техники

КУРСОВОЙ ПРОЕКТ

по дисциплине

«Программирование»

Выполнил студент_________________________

Курс__________________

Группа______________

Шифр_________________

Санкт-Петербург

2013

Приложение2. Оформление Технического задания

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«НАЦИОНАЛЬНЫЙ МИНЕРАЛЬНО-СЫРЬЕВОЙ УНИВЕРСИТЕТ «ГОРНЫЙ»

Кафедра информационных систем и вычислительной техники

ЗАДАНИЕ

на курсовой проект по дисциплине

«Программирование»

Студенту группы ________ ____________________________

ф.и.о.

Тема: “Обработка наборов данных на C#”

Исходные данные:(указывается Ваша конкретная предметная область)

Проект должен содержать:

- создание класса с описанием структуры данных (с различными типами полей);

- связывание с помощью компонента BindingSource созданной структуры с таблицей DataGridView;

- проверку правильности вводимых данных на уровне отдельной ячейки и строки в целом;

- использование средств XML-сериализации наборов данных для обеспечения чтения и записи данных в файл;

- использование средств навигации BindingNavigator, предоставляющий дополнительные средства навигации и редактирования данных;

- выполнение сортировки данных;

- выполнение поиска данных по указанному полю.

Срок сдачи законченного проекта ____________________________

Руководитель проекта ______________________ст.преп. Е.О.Шумова

Дата выдачи задания 25.03.2013 г.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]