Практична робота №7 Робота з таблицями

Київський технікум електронних приладів













Лабораторна робота №7
з дисципліни «Інструментальні зазоби візуального програмування»


на тему

«Створення рейтингу абітурієнтів»



























Мета роботи

- створення таблиці з інформацією про абітурієнтів;
- реалізація пошуку в таблиці;
- реалізація сортування таблиці;

Матеріали для засвоєння

1) Робота з таблицями(datagridview);
2) Заповнення, редагування полів таблиці;
3) Зміна властивостей таблиці.

Виконання роботи

Створення проекту

Створюємо новий проект Lab3 та замінюємо файли з попереднього проекту, як було показано раніше.

Створення таблиці

Рейтинг абітурієнтів зручніше всього представити у таблиці. Додамо до проекту форму 8, в якій буде міститися таблиця з рейтингом:



Верхня частина створена для сортування, основна – це таблиця datagridview.

У Form8_Loadопишемо заповнення таблиці. Спочатку створимо таблицю:

DataTable dt = newDataTable("table1"); //create table

Додамо до таблиці колонки з назвами полів:

//--------------Create columns----------------------
DataColumn dc1 = newDataColumn("ID", typeof(string));
DataColumn dc2 = newDataColumn("П.І.Б.", typeof(string));
DataColumn dc3 = newDataColumn("Факультет", typeof(string));
DataColumn dc4 = newDataColumn("Спеціальність", typeof(string));
DataColumn dc5 = newDataColumn("Деннаформаначання", typeof(string));
DataColumn dc6 = newDataColumn("Заочнаформаначання", typeof(string));
DataColumn dc7 = newDataColumn("Бюджет", typeof(string));
DataColumn dc8 = newDataColumn("Контракт", typeof(string));
DataColumn dc9 = newDataColumn("Українськамоваталітература", typeof(string));
DataColumn dc10 = newDataColumn("Математика", typeof(string));
DataColumn dc11 = newDataColumn("Фізика", typeof(string));
DataColumn dc12 = newDataColumn("Англійськамова", typeof(string));
DataColumn dc13 = newDataColumn("ІсторіяУкраїни", typeof(string));
DataColumn dc14 = newDataColumn("Біологія", typeof(string));
DataColumn dc15 = newDataColumn("Географія", typeof(string));
DataColumn dc16 = newDataColumn("Хімія", typeof(string));
DataColumn dc17 = newDataColumn("Російськамова", typeof(string));
DataColumn dc18 = newDataColumn("Кількістьпрофільнихбалів", typeof(string));
DataColumn dc19 = newDataColumn("Прохіднийбал", typeof(string));
DataColumn dc20 = newDataColumn("Льготи", typeof(string));
DataColumn dc21 = newDataColumn("Документ", typeof(string));

Зв’яжемо колонки та талбицю за допомогою функції Columns.Add(). Наприклад,dt.Columns.Add(dc1) – додали 1-шу колонку.
Відкриємо головний файл “Abiturient.txt” та запишемо з нього дані про кожного абітурієнта до колонок за допомогою:

DataRowdr; - створення рядку
dr = dt.NewRow(); -ініціалізація порожнього рядку
dr[номер колонки] = значення;- запис до відповідної колонки

Після запису інформаціїнеобхідно зв’язати дану таблицю з створеною на формі:

dataGridView1.DataSource = dt;

Далі необхідно відмінити стандартне сортування столбців:

for (int i = 0; i < dataGridView1.ColumnCount; i++)
dataGridView1.Columns[i].SortMode =DataGridViewColumnSortMode.NotSortable;

Стандартне сортування буде блокувати наше сортування, тому краще переозначити його.

Сортування стовпців

Для переозначення сортування необхідно додати обробники до подій ColumnHeaderMouseClick та ColumnHeaderMouseDoubleClick, що описують дії при натисненні миші на назву колонки 1 або 2-х разів.
Сортування будемо робити методом обміну:

//==============Sort by columns upwards======================
privatevoid dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)

· {
string[] temp1=newstring[21]; //temporary
string[] temp2 = newstring[21];//temporary
DataTable dat = (DataTable)dataGridView1.DataSource; //get table
for (int j=0;jfor (int i=0;iif (String.Compare(dat.Rows[i + 1][e.ColumnIndex].ToString(),
dat.Rows[i][e.ColumnIndex].ToString())<0) //next cell < current
{
for (int k = 0; k < dat.Columns.Count; k++) //copy rows to temporary
{
temp1[k] = dat.Rows[i][k].ToString();
temp2[k] = dat.Rows[i+1][k].ToString();
}
for (int k = 0; k < dat.Columns.Count; k++) //change rows
{
dat.Rows[i][k] = temp2[k];
dat.Rows[i+1][k] = temp1[k];
}
}
}

Якщо наступна клітина менша поточної, то замінюємо рядки місцями.
Аналогічно і для ColumnHeaderMouseDoubleClick, але навпаки: якщо наступна клітина більше поточної, то замінюємо рядки місцями.

Сортування користувача

Сортування користувача виконується аналогічно, але з перевіркою співпадання відповідного поля з поточним рядком. Наприклад, сортування по факультетам:

string str1=comboBox1.Text; //faculty
string str2=textBox2.Text; //speciality
string str3 = textBox1.Text; //name
string[] temp1=newstring[21]; //temporary for i-rows
string[] temp2 = newstring[21];//temporary for p-rows
int p = 0; //counter increaser
DataTable dat = (DataTable)dataGridView1.DataSource; //get table
if ((str1 != "")&&(str2=="")&&(str3=="")) //faculty entered
{
for (int i = 0; i < dat.Rows.Count; i++) //for all rows
{
if (dat.Rows[i][2].ToString() == str1) //row right
{
if (i == p) //row has biggest position
{
p++;
continue; //do nothing
}
for (int k = 0; k < dat.Columns.Count; k++) //copy rows to temporary
{
temp1[k] = dat.Rows[i][k].ToString();
temp2[k] = dat.Rows[p][k].ToString();
}
for (int k = 0; k < dat.Columns.Count; k++) //change rows
{
dat.Rows[i][k] = temp2[k];
dat.Rows[p][k] = temp1[k];
}
p++;
}
}
}

Тут ми дивимося на позицію рядка, який необхідно сортувати. Якщо ця позиція є найменшою, то залишаємо рядок на місці, інакше замінюємо з тим, чия позиція нижче. Таке сортування виконується набагато швидше, ніж звичайне, при великій кількості даних.
Аналогічне сортування необхідно розглянути і для спеціальності, і для ПІБ, і для їх різних комбінацій(якщо є факультет, спеціальність, але нема ПІБ тощо).

Висновок

В даній роботі ми створили таблицю для відображення рейтингу абітурієнтів, заповнили її даними та описали різні види сортувань.
Рисунок 215

Приложенные файлы

  • doc 20111817
    Размер файла: 95 kB Загрузок: 0

Добавить комментарий