Лекція 6. Семестр 2

Використання кольорів, та форматування тексту в компоненті DataGridView

В даній лекції буде представлятися матеріал, котрий буде реалізовувати деякі можливості щодо використання кольорів та форматування тексту в компоненті DataGridView. В лекції будуть розглянуті такі питання:

  • Загальні питання (Навіщо воно потрібно)
  • Розфарбування рядків.
  • Зміна параметрів шрифтів.
  • Створення полосатих сіток.

Створення «розмальованого» DataGridView. Що до виділення кольором клітинок, чи їх значень, досить суттєво допомагає орієнтуватися користувачу. Тобто якщо нереальні значення розфарбувати в червоний, а на компоненті розфарбувати рядки через один – користувач одразу зверне увагу і замислиться як це виправити.

Давайте детальніше спочатку розглянемо основні методи компоненти DataGridView, які можна використовувати для налаштування саме зручності з точки зору користувача.

Забігаючи наперед, скажемо, що є написаний додаток, який дозволить Вам наочно подивитися на зміни, які відбуваються на сітці при зміні тих, чи  інших параметрів. Програма доступна в кінці лекції, і містить в собі і вихідний код.

Деякі методи компоненти DataGridView:

·        dataGridView.AllowUserToAddRows  - логічне значення, яке дозволяє, або забороняє користувачу додавати нові рядки. Зазвичай в таблицях БД не використовується.

·        dataGridView.AllowUserToDeleteRows – логічне значення, яке дозволяє, або забороняє користувачу видаляти рядки.

·        dataGridView.AllowUserToOrderColumns – логічне значення, яке дозволяє, або забороняє користувачу сортувати стовпці.

·        dataGridView.ReadOnly – логічне значення, яке дозволяє, або забороняє користувачу редагувати дані сітки. Зазвичай сітку потрібно перевести в режим тільки для читання, якщо редагування, видалення та додання рядків таблиці здійснюється за допомогою запитів.

·        dataGridView.SelectionMode – вид відображення виділеної клітинки таблиці, якщо властивість рівна:

o    DataGridViewSelectionMode.FullRowSelect то виділятися буде одразу весь рядок, я не одна клітинка;

o   DataGridViewSelectionMode.CellSelect – звичайний режим, виділяється лише одна клітинка;

·        dataGridView.MultiSelect – логічне значення, яке дозволяє, або забороняє вибирати більше однієї клітинки одночасно.

·        dataGridView.AutoSizeRowsMode – автоматичний підбір висоти рядка відносно вмісту клітинок, може бути:

o   DataGridViewAutoSizeRowsMode.None – розмір автоматично вираховуватись не буде;

o   DataGridViewAutoSizeRowsMode.AllCells – висоти всіх рядків будуть вираховуватись автоматично;

o   DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders – будуть вираховуватись висоти всіх рядків, окрім рядку заголовків;

·        dataGridView.AutoSizeColumnsMode – автоматичний підбір ширини стовпця залежно від параметрів шрифтів та його вмісту, може приймати значення:

o   DataGridViewAutoSizeColumnsMode.AllCells – ширина всіх стовпців буде вираховуватись автоматично;

o   DataGridViewAutoSizeColumnsMode.None – автоматично ширина вираховуватись не буде;

o   DataGridViewAutoSizeColumnsMode.Fill – ширина стовпців буде вирахувана пропорційно так, щоб сітка займала всю ширину компоненти;

·        dataGridView.AllowUserToResizeColumns – логічне значення, яке дозволяє, або забороняє користувачу змінювати ширину стовпця.

·        dataGridView.AllowUserToResizeRows – логічне значення, яке дозволяє, або забороняє користувачу змінювати висоту рядків.

Тепер перейдемо до саме оформлення вигляду клітинок, стовпців та колонок. Розглянемо зміну кольору, та деяких параметрів шрифту.

Для початку, опишемо яким чином можна змінити колір вибраної області сітки. Для зміни кольору шрифту і фону можна використати:

 

dataGridView1.DefaultCellStyle.SelectionBackColor  = Color.FromArgb(0x30,0x30,0x30);  /* Задасть колір фону вибраної області */

dataGridView1.DefaultCellStyle.SelectionForeColor = Color.White; /* Колір тексту  вибраної області*/

 

Тепер розглянемо випадок, коли нам потрібно «розмалювати» сітку із даними в «полосатий» вигляд, тобто задати через рядок різні властивості відображення, на прикладі ми змінимо лише фон клітинки, але по великому рахунку можна задавати любі параметри, включаючи і нарис шрифту. Даний вислів буде вірний і для попереднього прикладу, наведеного вище.

dataGridView1.RowsDefaultCellStyle.BackColor = Color.FromArgb(0xCC,0xCC,0xCC); /* Стиль  непарного рядка */

dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(0xEE,0xEE,0xEE); /* Стиль парного рядка */

         Із загальними налаштуваннями сітки ми розібрались. Тепер потрібно розібратися, як задавати для кожної клітинки окремі параметри, наприклад, якщо в нас є яке-небудь невірне значення, і його потрібно виділити кольором, який би кинувся користувачу в очі, і заставив би його виправити. Ля того, щоб це зробити, потрібно буде перебрати сітку по рядкам і визначити, які клітинки перемальовувати іншим стилем, а які ні.

Примітка: після кожного оновлення сітки потрібно буде заново переформувати вигляд сітки, тому доцільно винести це в окрему процедуру.

Розглянемо, для прикладу, таблицю де є два особливих стовпця, перший – кількість одиниць товару, якщо ця кількість менше 5, то відобразимо клітинку світло голубим, і другий – стан, якщо в клітинці написано «брак», то відобразимо її червоним. Дана функція може мати такий вигляд:

private void recolor()

/*Функція яка примінює колір в залежності від клітинки та її вмісту*/

 {

    foreach (DataGridViewRow rw in dataGridView1.Rows) //перебираємо всі клітинки по рядках

      {

         int cv=0;//змінна для конвертації рядка в число

          /*Спробуємо конвертувати рядок в число, якщо спроба успішна

                  дивимося чи воно менше пяти*/

         if (Int32.TryParse(rw.Cells["count"].Value + "",out cv)&&(cv<5))

         rw.Cells["count"].Style.BackColor = Color.LightBlue; //якщо менеше - клітинка світло синя

         if (rw.Cells["state"].Value+"" == "брак")//перевіряємо чи рівний статус "брак"

         rw.Cells["state"].Style.BackColor = Color.Red;//якщо рівний - клітинка червона

       }

  }

Логіка функції досить примітивна, так, як можна виділити третю клітинку якщо значення двох інших лежать в певних діапазонах.

Результат виконання буде приблизно таким, як показано на малюнку нижче, ще ми зробили «полосату» сітку, так, як описано вище.

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

Скачати додаток можна тут.