Harrix Блог

  • Списки статей
    • Все статьи
    • IT
    • Qt
    • C++
    • Сложение двух чисел
    • Web программированиe
    • FAQ
    • Latex
    • Установка программ
    • Мифы
    • Видео
    • Про фото
  • Проекты
  • Harrix.org
  • RSS
  • Контакты

Вывод таблицы вручную в Visual Studio в CLR приложении

Учебный пример.

11.06.2017 Leave a Comment 9 612 просмотров

Как вывести данные в обычной таблице.

Содержание

  • Создание болванки приложения
  • Размещаем компоненты
  • Заполняем таблицу
  • Второй способ
  • Второй способ с циклом

Создание болванки приложения

Подготовьте приложение с готовой формой.

Подготовьте приложение с готовой формой. Прочитать об этом можно тут: Visual Studio 2017, Visual Studio 2015, Visual Studio 2010.

Размещаем компоненты

Разместите на приложении кнопку.

И размещаем компонент таблицы DataGridView. О компоненте можно почитать тут.

Растянул компонент.

Заполняем таблицу

При клике на кнопку должна добавиться таблица. Для этого дважды кликаем по кнопке и вводим код.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//Очистка строк и столбцов таблицы
dataGridView1->Rows->Clear();
dataGridView1->Columns->Clear();
 
//Создание столбцов  
DataGridViewTextBoxColumn ^firstColumn = gcnew DataGridViewTextBoxColumn();
firstColumn->HeaderText = "№";
firstColumn->Name = "№";
DataGridViewTextBoxColumn ^secondColumn = gcnew DataGridViewTextBoxColumn();
secondColumn->HeaderText = "Имя";
secondColumn->Name = "Имя";
DataGridViewCheckBoxColumn ^thirdColumn = gcnew DataGridViewCheckBoxColumn();
thirdColumn->Name = "Наличие велосипеда";
thirdColumn->HeaderText = "Наличие велосипеда";
 
//Добавление столбцов  
dataGridView1->Columns->Add(firstColumn);
dataGridView1->Columns->Add(secondColumn);
dataGridView1->Columns->Add(thirdColumn);
 
//Переменнняе для ячеек и строки таблицы
DataGridViewCell ^firstCell;
DataGridViewCell ^secondCell;
DataGridViewCell ^thirdCell;
DataGridViewRow ^row;
 
//Создание ячеек для первой строки  
firstCell = gcnew DataGridViewTextBoxCell();
secondCell = gcnew DataGridViewTextBoxCell();
thirdCell = gcnew DataGridViewCheckBoxCell();
row = gcnew DataGridViewRow();
firstCell->Value = "1";
secondCell->Value = "Ганс";
thirdCell->Value = true;
row->Cells->AddRange(firstCell, secondCell, thirdCell);
dataGridView1->Rows->Add(row);
 
//Создание ячеек для второй строки  
firstCell = gcnew DataGridViewTextBoxCell();
secondCell = gcnew DataGridViewTextBoxCell();
thirdCell = gcnew DataGridViewCheckBoxCell();
row = gcnew DataGridViewRow();
firstCell->Value = "2";
secondCell->Value = "Тимофей";
thirdCell->Value = false;
row->Cells->AddRange(firstCell, secondCell, thirdCell);
dataGridView1->Rows->Add(row);
 
//Создание ячеек для третьей строки  
firstCell = gcnew DataGridViewTextBoxCell();
secondCell = gcnew DataGridViewTextBoxCell();
thirdCell = gcnew DataGridViewCheckBoxCell();
row = gcnew DataGridViewRow();
firstCell->Value = "3";
secondCell->Value = "Квазимодо";
thirdCell->Value = true;
row->Cells->AddRange(firstCell, secondCell, thirdCell);
dataGridView1->Rows->Add(row);

При запуске приложения и нажатии на кнопку получим следующее.

Надеюсь, что очевидно, что создание новой строчки таблицы можно запихать в цикл.

Второй способ

Предыдущий вариант не очень эффективный, так как даже при добавлении трех строк видно, как появляются записи: после добавления каждой новой строчки таблица отрисовывается заново. А представьте что будет, если записей будет куда больше?

Лучше заранее подготовить невидимую таблицу данных DataTable ^table, заполнить ей тем, что нужно. А потом одной строчкой dataGridView1->DataSource = table; отобразить все данные.

Код клика кнопки.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
DataTable ^table; //Невидимая таблица данных
DataColumn ^column; //Столбец таблицы
DataRow ^row; //Строка таблицы
 
//Создаем таблицу данных
table = gcnew DataTable();
 
//Названия столбцов
String^ nameFirstColumn = "№";
String^ nameSecondColumn = "Имя";
String^ nameThirdColumn = "Наличие велосипеда";
 
//Создание и добавление столбцов
column = gcnew DataColumn(nameFirstColumn, Int32::typeid);
table->Columns->Add(column);
column = gcnew DataColumn(nameSecondColumn, String::typeid);
table->Columns->Add(column);
column = gcnew DataColumn(nameThirdColumn, Boolean::typeid);
table->Columns->Add(column);
 
//Заполняем первую строчку таблицы
row = table->NewRow();
row[nameFirstColumn] = 1;
row[nameSecondColumn] = "Ганс";
row[nameThirdColumn] = true;
table->Rows->Add(row);
 
//Заполняем вторую строчку таблицы
row = table->NewRow();
row[nameFirstColumn] = 2;
row[nameSecondColumn] = "Тимофей";
row[nameThirdColumn] = false;
table->Rows->Add(row);
 
//Заполняем третью строчку таблицы
row = table->NewRow();
row[nameFirstColumn] = 3;
row[nameSecondColumn] = "Квазимодо";
row[nameThirdColumn] = true;
table->Rows->Add(row);
 
//Отображаем таблицу в визуальном компоненте
dataGridView1->DataSource = table;

Типы колонок для отображения информации можно посмотреть по ссылке.

Второй способ с циклом

Покажем напоследок, как тот же код будет выглядеть с циклом.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
DataTable ^table; //Невидимая таблица данных
DataColumn ^column; //Столбец таблицы
DataRow ^row; //Строка таблицы
 
//Создаем таблицу данных
table = gcnew DataTable();
 
//Названия столбцов
String^ nameFirstColumn = "№";
String^ nameSecondColumn = "Имя";
String^ nameThirdColumn = "Наличие велосипеда";
 
//Создание и добавление столбцов
column = gcnew DataColumn(nameFirstColumn, Int32::typeid);
table->Columns->Add(column);
column = gcnew DataColumn(nameSecondColumn, String::typeid);
table->Columns->Add(column);
column = gcnew DataColumn(nameThirdColumn, Boolean::typeid);
table->Columns->Add(column);
 
for (int i = 0; i < 100; i++) {
//Заполняем строчку таблицы
row = table->NewRow();
row[nameFirstColumn] = i;
row[nameSecondColumn] = " Имя " + i.ToString();
row[nameThirdColumn] = i % 2 == 0;
table->Rows->Add(row);
}
 
//Отображаем таблицу в визуальном компоненте
dataGridView1->DataSource = table;


Статьи по теме:

  1. Создание класса с вектором экземпляров другого класса на C++/CLI
  2. Разбор XML файла с применением классов на C++/CLI
  3. Подключение SQLite в проектах Visual Studio в CRL проекте
  4. Сложение двух чисел в Visual Studio 2010 (консольное Win32 приложение)

IT C++, C++/CLI, Visual Studio, Таблица

© 2014 Harrix