C#: DataGridView и примеры работы с ним

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