DataGridView пример программного добавления ячеек.

Язык программирования C#

Здесь я приведу пример программного добавления ячеек, а соответственно столбцов и строк.

Это может понадобится тогда, когда ну очень надо заполнить DataGridView и при этом совсем не нужен DataSet.

В моём случае, чаще всего это требуется когда необходимо заполнить какие либо параметры, которые могут отличаться для одного и того же объекта, скажем их просто может быть разное количество, вдобавок они могут быть разного типа, и т.п.

Итак, пример:

DataGridViewColumn col = new DataGridViewColumn();
            col.HeaderText = "Параметр";
            col.ReadOnly = true;
            DataGridViewColumn col1 = new DataGridViewColumn();
            col1.HeaderText = "Значение";
            col1.ReadOnly = false;

            dataGridView1.Columns.Add(col);
            dataGridView1.Columns.Add(col1);

            DataGridViewCell cel1 = new DataGridViewTextBoxCell();
            DataGridViewCell cel2 = new DataGridViewTextBoxCell();
            cel1.Style.BackColor = Color.LightGray;
            DataGridViewRow row = new DataGridViewRow();
            cel1.Value = "Штуки";
            cel2.Value = "";
            row.Cells.AddRange(cel1, cel2);
            dataGridView1.Rows.Add(row);

            cel1 = new DataGridViewTextBoxCell();
            cel2 = new DataGridViewTextBoxCell();
            cel1.Style.BackColor = Color.LightGray;
            row = new DataGridViewRow();
            cel1.Value = "Коэф.";
            cel2.Value = "";
            row.Cells.AddRange(cel1, cel2);
            dataGridView1.Rows.Add(row);

            cel1 = new DataGridViewTextBoxCell();
            cel2 = new DataGridViewTextBoxCell();
            cel1.Style.BackColor = Color.LightGray;
            row = new DataGridViewRow();
            cel1.Value = "Вес";
            cel2.Value = "";
            row.Cells.AddRange(cel1, cel2);
            dataGridView1.Rows.Add(row);

            cel1 = new DataGridViewTextBoxCell();
            cel2 = new DataGridViewTextBoxCell();
            cel1.Style.BackColor = Color.LightGray;
            row = new DataGridViewRow();
            cel1.Value = "Штрих-Код";
            cel2.Value = "";
            row.Cells.AddRange(cel1, cel2);
            dataGridView1.Rows.Add(row);

Вот, как это выглядит в результате:

DataGridView

Комментарии:

Lex9sysT2 21 May 2010, 10:39 1 0

Работает! VS C# 2010 програмное заполнение DataGridView Удачи!


 
            DataGridViewTextBoxColumn col0 = new DataGridViewTextBoxColumn();
            col0.HeaderText = "Параметр";
            col0.Name = "ID";
            DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn();
            col1.HeaderText = "Параметр1";
            col1.Name = "ID1";
            DataGridViewTextBoxColumn col2 = new DataGridViewTextBoxColumn();
            col2.HeaderText = "Параметр2";
            col2.Name = "ID2";
            this.dataGridView1.Columns.Add(col0);
            this.dataGridView1.Columns.Add(col1);
            this.dataGridView1.Columns.Add(col2);

            DataGridViewCell cel0 = new DataGridViewTextBoxCell();
            DataGridViewCell cel1 = new DataGridViewTextBoxCell();
            DataGridViewCell cel2 = new DataGridViewTextBoxCell();
            DataGridViewRow row = new DataGridViewRow();
            cel0.Value = "Значение11";
            cel1.Value = "Значение12";
            cel2.Value = "Значение13";
            row.Cells.AddRange(cel0, cel1, cel2);
            this.dataGridView1.Rows.Add(row);
            cel0 = new DataGridViewTextBoxCell();
            cel1 = new DataGridViewTextBoxCell();
            cel2 = new DataGridViewTextBoxCell();
            row = new DataGridViewRow();
            cel0.Value = "Значение21";
            cel1.Value = "Значение22";
            cel2.Value = "Значение23";
            row.Cells.AddRange(cel0, cel1, cel2);
            this.dataGridView1.Rows.Add(row);
            cel0 = new DataGridViewTextBoxCell();
            cel1 = new DataGridViewTextBoxCell();
            cel2 = new DataGridViewTextBoxCell();
            row = new DataGridViewRow();
            cel0.Value = "Значение31";
            cel1.Value = "Значение32";
            cel2.Value = "Значение33";
            row.Cells.AddRange(cel0, cel1, cel2);
            this.dataGridView1.Rows.Add(row);
            cel0 = new DataGridViewTextBoxCell();
            cel1 = new DataGridViewTextBoxCell();
            cel2 = new DataGridViewTextBoxCell();
            row = new DataGridViewRow();
            cel0.Value = "Значение41";
            cel1.Value = "Значение42";
            cel2.Value = "Значение43";
            row.Cells.AddRange(cel0, cel1, cel2);
            this.dataGridView1.Rows.Add(row);


Ответить
Lex9sysT2 21 May 2010, 11:05 0 0

Добавить строчками выше. Для красоты (AutoSizeColumnsMode AutoSizeRowsMode)


dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;


Ответить
Lex9sysT2 21 May 2010, 11:06 0 0

Ответить
Roman 21 May 2010, 11:20 1 0

Вообще в плане Win Forms VS 2010 от VS 2008 мало чем отличаются. А вот WPF — совсем другое дело. Разбирался на днях с WPF-ным DataGrid-ом — вот там простор для творчества!

Ответить
Lex9sysT2 24 May 2010, 04:20 0 0

раньше на WPF внимания не обращал. Спасибо!… а то так и жил бы в пещере.

Ответить
djnik 18 June 2011, 04:50 1 0

при добавлении столбца в dataGridView выпадает следующая ошибка:
Column cannot be added because its CellType property is null.

Код:
DataGridViewColumn col1 = new DataGridViewColumn();
col1.HeaderText = «Наименование»;
col1.Width = 300;

dataGridView1.Columns.Add(col1);

Ответить
Roman 18 June 2011, 12:43 0 0

Теперь уже не выяснить почему тот пример у мена работал, но сейчас в 2008 попробовал то-же самое действительно ошибка.

Чтобы правильно работало надо задавать шаблон ячейки у столбца вот так:

DataGridViewCell cell = new DataGridViewTextBoxCell();
DataGridViewCell cell1 = new DataGridViewTextBoxCell();

DataGridViewColumn col = new DataGridViewColumn();
col.HeaderText = "Параметр";
col.ReadOnly = true;
col.CellTemplate = cell;
DataGridViewColumn col1 = new DataGridViewColumn();
col1.HeaderText = "Значение";
col1.ReadOnly = false;
col1.CellTemplate = cell1;

dataGridView1.Columns.Add(col);
dataGridView1.Columns.Add(col1);

Вот так у меня всё заработало.

Ответить
djnik 18 June 2011, 02:43 1 0

Спасибо.

можно также задавать шаблон столбца (а не отдельных ячеек), например:
DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn();

Ответить