C#. Элемент управления dataGridView




Элемент управления dataGridView

Данная тема использует программный код из темы:


Содержание


Поиск на других ресурсах:

1. Какое назначение элемента управления DataGridView?

В Microsoft Visual Studio элемент управления dataGridView разработан для использования в приложениях, созданных по шаблону Windows Forms Application. Данный элемент управления позволяет организовывать данные в виде таблицы. Данные могут быть получены из базы данных, коллекции, внутренних переменных — массивов или других объектов программы.

Данный элемент управления аналогичен компоненту TStringGrid в системе визуальной разработки приложений.

Данный элемент размещен на панели инструментов ToolBox во вкладках «All Windows Forms» или «Data» (рисунок 1).

После размещения на форме, система создает объект (переменную) с именем dataGridView1. С помощью этого имени можно программно оперировать методами и свойствами этого элемента управления.

C# элемент управления dataGridView свойства

Рис. 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. Добавление столбца программным путем

Добавить столбец в 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, "Moscow");
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;

 


Связанные темы