Сегодня я решил написать Вам о том, как работать с элементом управления DataGridView в языке программирования C#.
DataGridView — очень мощный инструмент для работы с данными. Он очень гибок и позволяет автоматизировать вывод информации. Я постараюсь рассказать Вам о базовой работе с данным элементом, а так же привести пример автоматизации обновления данных в таблице.
Для тех, кто не знает о элементе управления DataGridView — скажу что данный контрол позволяет вывести таблицу с данными в Вашей программе. Данный элемент управления имеет огромное число настроек. Благодаря этому Вы скорей всего сможете подстроить внешний вид таблицы так, как Вам нужно. Все настройки доступны в панели свойств элемента в Visual Studio. Я буду задавать свойства нашего элемента пряма в коде, для большей наглядности.
И так создадим новый проект WinForms и добавим на форму элемент DataGridView. При добавлении элемента DataGridView появляется окно, где можно указать источник данных для нашей таблицы. Просто закроем данное окно. Перейдем в событие загрузки формы и зададим шапку для нашей таблицы.
private void Form1_Load(object sender, EventArgs e)
{
//создадим таблицу вывода товаров с колонками
//Название, Цена, Остаток
var column1 = new DataGridViewColumn();
column1.HeaderText = "Название"; //текст в шапке
column1.Width = 100; //ширина колонки
column1.ReadOnly = true; //значение в этой колонке нельзя править
column1.Name = "name"; //текстовое имя колонки, его можно использовать вместо обращений по индексу
column1.Frozen = true; //флаг, что данная колонка всегда отображается на своем месте
column1.CellTemplate = new DataGridViewTextBoxCell(); //тип нашей колонки
var column2 = new DataGridViewColumn();
column2.HeaderText = "Цена";
column2.Name = "price";
column2.CellTemplate = new DataGridViewTextBoxCell();
var column3 = new DataGridViewColumn();
column3.HeaderText = "Остаток";
column3.Name = "count";
column3.CellTemplate = new DataGridViewTextBoxCell();
dataGridView1.Columns.Add(column1);
dataGridView1.Columns.Add(column2);
dataGridView1.Columns.Add(column3);
dataGridView1.AllowUserToAddRows = false; //запрешаем пользователю самому добавлять строки
for (int i = 0; i < 5; ++i)
{
//Добавляем строку, указывая значения колонок поочереди слева направо
dataGridView1.Rows.Add("Пример 1, Товар " + i, i * 1000, i);
}
for (int i = 0; i < 5; ++i)
{
//Добавляем строку, указывая значения каждой ячейки по имени (можно использовать индекс 0, 1, 2 вместо имен)
dataGridView1.Rows.Add();
dataGridView1["name", dataGridView1.Rows.Count - 1].Value = "Пример 2, Товар " + i;
dataGridView1["price", dataGridView1.Rows.Count - 1].Value = i * 1000;
dataGridView1["count", dataGridView1.Rows.Count - 1].Value = i;
}
//А теперь простой пройдемся циклом по всем ячейкам
for (int i = 0; i < dataGridView1.Rows.Count; ++i)
{
for (int j = 0; j < dataGridView1.Columns.Count; ++j)
{
//Значения ячеек хряняться в типе object
//это позволяет хранить любые данные в таблице
object o = dataGridView1[j, i].Value;
}
}
}
}
В целом это и есть базовая работа с элементом DataGridView. По сути мы имеем работу с матрицей (двумерным массивом). Давайте теперь рассмотрим базовый вариант автоматизации обновления данных в таблице - механизм привязки (Binding).
Для этого создадим класс, который будет играть роль одной строки. Т.е. по сути нам нужно создать класс, описывающий колонки нашей таблицы.
class SampleRow
{
public string Name { get; set; } //обязательно нужно использовать get конструкцию
public float Price { get; set; }
public int Count { get; set; }
public string Hidden = ""; //Данное свойство не будет отображаться как колонка
public SampleRow(string name, float price, int count)
{
this.Name = name;
this.Price = price;
this.Count = count;
}
}
Теперь мы можем написать следующий код в событии формы OnLoad:
private void Form1_Load(object sender, EventArgs e)
{
BindingList<SampleRow> data = new BindingList<SampleRow>(); //Специальный список List с вызовом события обновления внутреннего состояния, необходимого для автообновления datagridview
data.Add(new SampleRow("Товар 1", 100, 1));
data.Add(new SampleRow("Товар 2", 200, 2));
data.Add(new SampleRow("Товар 3", 300, 3));
dataGridView1.DataSource = data;
data.Add(new SampleRow("Товар 4", 400, 4));
}