Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Виконання роботиМета роботи - створення таблиці з інформацією про абітурієнтів; - реалізація пошуку в таблиці; - реалізація сортування таблиці;
Матеріали для засвоєння 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;j<dat.Rows.Count;j++) //do number of wors times for (int i=0;i<dat.Rows.Count-1;i++) //for each row if (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++; } } }
Тут ми дивимося на позицію рядка, який необхідно сортувати. Якщо ця позиція є найменшою, то залишаємо рядок на місці, інакше замінюємо з тим, чия позиція нижче. Таке сортування виконується набагато швидше, ніж звичайне, при великій кількості даних. Аналогічне сортування необхідно розглянути і для спеціальності, і для ПІБ, і для їх різних комбінацій(якщо є факультет, спеціальність, але нема ПІБ тощо).
|