C#. Елемент управління DataGridView




Елемент управління DataGridView

Дана тема використовує програмний код, взятий з теми:


Зміст


Пошук на інших ресурсах:

1. Яке призначення елементу управління DataGridView?

У Microsoft Visual Studio елемент управління dataGridView розроблений для використання в додатках, створених за шаблоном Windows Forms Application. Даний елемент управління дозволяє організовувати дані у вигляді таблиці. Дані можуть отримуватись з бази даних, колекції, внутрішніх змінних – масивів чи інших об’єктів програми.

Даний елемент управління є аналогічний компоненту TStringGrid в системі візуальної розробки додатків Delphi.

Даний елемент управління можна знайти на панелі інструментів ToolBox у вкладках “All Windows Forms” або “Data” (рисунок 1).

Після розміщення на формі, система за замовчуванням створює об’єкт (змінну) з іменем dataGridView1. З допомогою цього імені можна програмно оперувати методами та властивостями цього елементу управління.

C# Visual Studio dataGridView properties window

Рис. 1. Елемент управління dataGridView1 та вікно Properties з властивостями

 

2. Чи можна використовувати елемент управління DataGridView безпосередньо без зв’язування його з базою даних?

Так, можна. В DataGridView дані можуть отримуватись з бази даних, колекції, внутрішніх структур даних (масивів, структур тощо).

 

3. Як програмно задати розміри DataGridView? Властивості Width, Height

Для задавання розмірів DataGridView використовуються властивості Width та Height.

// задати розміри dataGridView1.
// Висота - 200 пікселів. Ширина - 350 пікселів
dataGridView1.Width = 350;
dataGridView1.Height = 200;

 

4. Які види даних (типи) можуть бути представлені у комірках DataGridView?

Види даних, що можуть бути представлені у комірках dataGridView:

  • dataGridViewButtonColumn. Комірки представлені у вигляді кнопок типу Button;
  • dataGridViewCheckBoxColumn. Комірки представлені елементами управління типу CheckBox, які дозволяють вибирати декілька варіантів (опцій) з набору запропонованих;
  • dataGridViewComboBoxColumn. Комірки представлені елементами управління типу ComboBox, що призначені для вибору одного з декількох варіантів;
  • dataGridViewImageColumn. Комірки таблиці є зображеннями типу Image;
  • dataGridViewLinkColumn. Комірки таблиці представлені посиланнями;
  • dataGridViewTextBoxColumn. Цей варіант пропонується за замовчуванням при додаванні (створенні) нової колонки. У цьому випадку комірки таблиці представлені у вигляді полів вводу. Це дозволяє вводити дані в таблицю як в матрицю.


 

5. Додавання стовпця програмним шляхом. Властивість Columns. Методи Add, Insert

Додати стовпець в dataGridView можна:

  • з допомогою спеціального майстра;
  • програмним шляхом.

Стовпці у dataGridView організовані у вигляді колекції Columns типу DataGridViewColumnCollection. Щоб додати стовпець програмним шляхом використовується метод (команда) Add з колекції Columns.

Метод Add() має 2 варіанти реалізації:

int DataGridViewColumnCollection.Add(DataGridViewColumn dataGridViewColumn);

int DataGridViewColumnCollection.Add(string ColumnName, string HeaderText);

де

  • DataGridViewColumn – тип System.Windows.Forms.Column що додається;
  • ColumnName – назва, за якою буде здійснюватись звертання до стовпця в інших методах;
  • HeaderText – текст, що відображатиметься у заголовку колонки.

Фрагмент коду додавання двох довільних стовпців наступний:

// Додати стовпець з іменем column-1, заголовок стовпця - "Header column - 1"
dataGridView1.Columns.Add("column-1", "Header column - 1");

// Додати стовпець з іменем column-2
dataGridView1.Columns.Add("column-2", "Header column - 2");

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

Для вставки стовпця використовується метод Insert, що має таке оголошення

void DataGridViewColumnCollection.Insert(int columnIndex, DataGridViewColumn dataGridViewColumn);

Виклик цього методу з програмного коду є аналогічний методу Add().

 

6. Як реалізувати видалення стовпця програмним шляхом? Методи Remove() та RemoveAt()

Щоб видалити стовпець використовується один з двох методів з колекції Columns:

  • метод RemoveAt() – видаляє стовпець з заданого індексу в колекції;
  • метод Remove() – видаляє стовпець за його іменем.

Загальний вигляд методу RemoveAt():

void DataGridViewColumnCollection.RemoveAt(int index);

де

  • index – заданий індекс в колекції. Індекси нумеруються з 0.
void DataGridViewColumnCollection.Remove(string ColumnName);

де

  • ColumnName – назва стовпця (але не назва заголовку стовпця), яка задається в методі Add() першим параметром. Стовпці в колекції можуть мати однакові значення ColumnName. Якщо при виклику методу Remove() стовпця з іменем ColumnName немає, то генерується виключна ситуація.

Фрагмент коду видалення стовпця з допомогою методу RemoveAt():

// видалення стовпця в позиції index
int index; // номер стовпця, що видаляється
int n; // поточна кількість стовпців в dataGridView

// задати номер стовпця, що видаляється
index = 1;

// визначити поточну кількість стовпців у dataGridView
n = dataGridView1.Columns.Count;

// видалення
if ((n > 0) && (index >= 0) && (index < n))
{
    dataGridView1.Columns.RemoveAt(index);
    label1.Text = "Стовпець видалено";
}
else
{
    label1.Text = "Стовпець не видалено";
}

 

7. Програмне додавання рядка. Метод Add()

Додавати рядок можна двома способами:

  • шляхом безпосереднього вводу з клавіатури;
  • програмно.

Рядки в DataGridView організовані у вигляді колекції Rows типу dataGridViewRowCollection.

Нижче наведено фрагмент коду, що додає 2 довільні рядки в таблицю

// Додати рядки в таблицю
if (dataGridView1.Columns.Count <= 0)
{
    label1.Text = "Рядки не додано";
    return;
}

dataGridView1.Rows.Add("Ivanov I.I.", 25, "New York");
dataGridView1.Rows.Add("Petrenko P.P.", 38, "London");
label1.Text = "Рядки додано";

 

8. Програмне видалення рядка. Методи Remove() та RemoveAt()

Для видалення рядка використовується один з двох методів:

  • метод RemoveAt() – видаляє рядок за заданим індексом;
  • метод Remove() – видаляє рядок, що є вхідним параметром типу DataGridViewRow.

Фрагмент коду видалення рядка має вигляд:

// Видалити рядок
int nr, nc;

nc = dataGridView1.Columns.Count; // кількість стовпців
nr = dataGridView1.RowCount;

if ((nc > 0) && (nr > 1))
{
    dataGridView1.Rows.RemoveAt(0); // видалити перший рядок
    label1.Text = "Рядок видалено";
}
else
{
    label1.Text = "Рядок не видалено";
}

 

9. Задавання тексту заголовку в заданому стовпці програмним шляхом

Щоб задати текст заголовку в заданому стовпці використовується властивість HeaderText. Текст обробника події задавання тексту заголовку в стовпці з індексом 0 має вигляд:

// задати текст в заголовку
int nc = dataGridView1.ColumnCount;

if (nc > 0)
{
    // задати новий текст заголовку першого стовпця
    dataGridView1.Columns[0].HeaderText = "Header - 1";
    label1.Text = "Текст задано";
}
else
{
    label1.Text = "Текст не задано";
}

 

10. Задавання вирівнювання заголовку в заданому стовпці програмним шляхом

Вирівнювання заголовку в стовпці задається з допомогою властивості HeaderCell.Style.Alignment.

Фрагмент коду задавання вирівнювання в заголовку стовпця з індексом 0:

// вирівнювання заголовку
int nc;
nc = dataGridView1.ColumnCount;

if (nc > 0)
{
    // задати вирівнювання по центру (по горизонталі і по вертикалі)
    dataGridView1.Columns[0].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
    label1.Text = "Вирівнювання виконано";
}
else
{
    label1.Text = "Вирівнювання не виконано";
}

 

11. Встановлення шрифту заголовку в стовпцях програмним шляхом

Для встановлення шрифту в заголовках стовпців використовується властивість ColumnHeadersDefaultCellStyle. У цій властивості використовується властивість Font.

В обробнику події створюється шрифт Arial, який має розмір 12 і стиль “курсив”.

// задати шрифт в заголовку

// створити шрифт "Arial", розмір 12, стиль - "курсив"
Font F = new Font("Arial", 12, FontStyle.Italic);

if (nc > 0)
{
    // встановити шрифт заголовку
    dataGridView1.ColumnHeadersDefaultCellStyle.Font = F;
    label1.Text = "Шрифт задано";
}
else
{
    label1.Text = "Шрифт не задано";
}

 

12. Задавання кольору шрифту заголовків програмним шляхом

Щоб задати колір шрифту заголовків програмним шляхом потрібно використати властивість ColumnHeaderDefaultCellStyle. У цій властивості є властивості ForeColor та BackColor.

int nc;
nc = dataGridView1.ColumnCount;

if (nc > 0)
{
    // створити системний шрифт
    Font F = new Font("Arial", 14);

    // задати колір в заголовках стовпців
    dataGridView1.ColumnHeadersDefaultCellStyle.ForeColor = Color.Purple;

    // задати шрифт
    dataGridView1.Columns[0].DefaultCellStyle.Font = F;

    label1.Text = "Колір заголовку змінено";
}
else
{
    label1.Text = "Колір не змінено";
}

 

13. Задавання розмірів dataGridView1
// задати розмір dataGridView1
dataGridView1.Width = 600;
dataGridView1.Height = 150;

 

14. Задавання ширини заданого стовпця dataGridView1
// задати ширину стовпця
int nc;
nc = dataGridView1.ColumnCount;

if (nc > 0)
{
    // задати ширину стовпця з індексом 0
    dataGridView1.Columns[0].Width = 70;
    label1.Text = "Ширина стовпця задана";
}
else
{
    label1.Text = "Ширина стовпця не задана";
}

 

15. Задавання висоти заданого рядка dataGridView1
// задати висоту рядка
int nc, nr;
nc = dataGridView1.ColumnCount;
nr = dataGridView1.RowCount;

if ((nc > 0) && (nr > 1))
{
    dataGridView1.Rows[0].Height = 50;
    label1.Text = "Висоту рядка задано";
}
else
{
    label1.Text = "Висоту рядка не задано";
}

 

16. Задавання вирівнювання в заданому стовпці та рядку
// вирівнювання у рядках
int nc, nr;
nc = dataGridView1.ColumnCount;
nr = dataGridView1.RowCount;

if ((nc > 0)&&(nr>1))
{
    // вирівнювання для усіх рядків
    dataGridView1.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;

    // вирівнювання для рядка з індексом 0
    dataGridView1.Rows[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;

    // вирівнювання для стовпця з індексом 0
    dataGridView1.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomLeft;
}

  

17. Задавання шрифту, кольору символів і фону в першому стовпці

Щоб задати шрифт, колір символів і фону у першому стовпці, використовується властивість DefaultCellStyle стовпця з індексом 0. У цій властивості є властивості Font, BackColor, ForeColor.

Нижче наведено фрагмент коду, що задає колір шрифту, символів і фону в dataGridView1.

// шрифт і колір у першому стовпці
int nc, nr;
nc = dataGridView1.ColumnCount;
nr = dataGridView1.RowCount;

if ((nc > 0) && (nr > 1))
{
    // створити шрифт
    Font F = new Font("Times New Roman", 10, FontStyle.Bold);

    // колір символів і фону у першому стовпці
    dataGridView1.Columns[0].DefaultCellStyle.BackColor = Color.Red;
    dataGridView1.Columns[0].DefaultCellStyle.ForeColor = Color.Blue;

    // шрифт у першому стовпці
    dataGridView1.Columns[0].DefaultCellStyle.Font = F;

    label1.Text = "Шрифт і колір у 1-му стовпці змінено";
}
else
{
    label1.Text = "Шрифт не змінено";
}

 

18. Визначення кількості стовпців
// визначити кількість стовпців
int n;
n = dataGridView1.Columns.Count;
label1.Text = n.ToString();

 

19. Визначення кількості рядків
// визначити кількість рядків без рядка заголовку
int n;
n = dataGridView1.Rows.Count;
label1.Text = (n - 1).ToString();

 

20. Визначення ширини заданого стовпця в пікселях
// ширина стовпця в пікселях
int w;
int nc;

nc = dataGridView1.Columns.Count;

if (nc > 0)
{
    w = dataGridView1.Columns[0].Width;
    label1.Text = w.ToString();
}

 

21. Визначення висоти заданого рядка в пікселях
// визначити висоту рядка в пікселях
int h;
int nr, nc;

nc = dataGridView1.Columns.Count;
nr = dataGridView1.RowCount;

if ((nr>1)&&(nc>0))
{
    h = dataGridView1.Rows[0].Height;
    label1.Text = h.ToString();
}

 

22. Визначення номеру виділеного рядка. Властивість CurrentRow

Часто в додатках потрібно визначити виділений рядок в таблиці DataGridView. Для цього використовується властивість CurrentRow, яка містить позицію всю необхідну інформацію про виділений рядок. Щоб визначити позицію виділеного рядка використовується властивість CurrentRow.Index.

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

// 1. Перевірка, чи є рядки в dataGridView1
if (dataGridView1.RowCount <= 1)
  return;

// 2. Визначення номеру (позиції) виділеного рядка
int index = dataGridView1.CurrentRow.Index;

// 3. Перевірка, чи виділений взагалі рядок
if (index == dataGridView1.RowCount - 1)
{
  label1.Text = "Рядок не виділено";
  return;
}

// 3. Якщо рядок виділено, то вивести інформацію про нього
string name = (string)dataGridView1.Rows[index].Cells[0].Value;
string surname = (string)dataGridView1.Rows[index].Cells[1].Value;
string telephone = (string)dataGridView1.Rows[index].Cells[2].Value;

label1.Text = "Виділений рядок: " + name + "/" + surname +
    "/" + telephone;

 


Зв’язані теми