Сегодня я решил написать Вам о том, как работать с элементом управления 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)); }