Как создать и добавить колонку в элементе DataGridView?

Создание и добавление колонки в DataGridView

В этой статье показано, как программно создать и добавить колонку в DataGridView.

Создадим новое приложение типа Windows Forms Application на языке c#, после чего добавим на форму элемент управления DataGridView (dgv) и кнопку (Button).

windows form

Создание колонки в DataGridView

Перед тем как создать колонку в DataGridView необходимо определить её тип:

DataGridViewTextBoxColumn
DataGridViewCheckBoxColumn
DataGridViewImageColumn
DataGridViewComboBoxColumn
DataGridViewButtonColumn
DataGridViewLinkColumn
Custom Column (пользовательский тип)

Каждый тип имеет свои особенности, например:

DataGridViewCheckBoxColumn — колонка используется для отображения значений типа Boolean.

DataGridViewTextBoxColumn — позволяет отобразить числовые данные либо строки.

DataGridViewLinkColumn — используется для вывода гиперссылок или ссылок на какие-то данные.

После определения типа создаваемой колонки необходимо создать объект выбранного типа.

Например, создадим в элементе DataGridView колонку, которая будет отображать возраст человека. Возраст — это числовое значение, поэтому колонка будет иметь тип DataGridViewTextBoxColumn.

Код создания объекта поместим в обработчике события Button_Click.

private void button1_Click(object sender, EventArgs e)
{
//создание колонки
DataGridViewTextBoxColumn dgvAge;
dgvAge = new DataGridViewTextBoxColumn();
}

После того как объект создан, можно установить или изменить его свойства. Например, с помощью свойства Name укажем название колонки:

dgvAge.Name = "dgvAge";

С помощью свойства HeaderText установим заголовок колонки, который будет, отображаться в элементе DataGridView.

dgvAge.HeaderText = "Возраст";

Ну и, например, изменим ширину колонки с помощью свойства Width.

dgvAge.Width = 100;

Добавление колонки в DataGridView

Колонка создана, и теперь её нужно добавить в DataGridView. Для этого воспользуемся методом Add, с помощью которого мы поместим ранее созданный объект в коллекцию типа DataGridViewColumnCollection представленную свойством Columns.

private void button1_Click(object sender, EventArgs e)
{
//создание колонки
DataGridViewTextBoxColumn dgvAge;
dgvAge = new DataGridViewTextBoxColumn();
//установка свойств
dgvAge.Name = "dgvAge";
dgvAge.HeaderText = "Возраст";
dgvAge.Width = 100;
//добавили колонку
dgv.Columns.Add(dgvAge);
//либо
dgv.Columns.Add(new DataGridViewTextBoxColumn() { Name = "dgvAge", HeaderText = "Возраст", Width = 100});
}

колонка

С помощью свойства Count убедимся, что колонка действительно была добавлена в DataGridView.

int dgvСolumnsCount = dgv.Columns.Count; //1

Метод Add позволяет не только добавлять уже созданные объекты (колонки), но и создавать их на лету. Например, колонку dgvAge можно создать и добавить следующим образом:

dgv.Columns.Add("dgvAge", "Возраст");

В результате будет создана колонка типа (по умолчанию) DataGridViewTextBoxColumn.

Теперь можно изменить свойства добавленной колонки:

//устанавливаем ширину колонки
dgv.Columns["dgvAge"].Width = 100;

Обратиться к добавленной колонке можно либо по имени, которое задаётся с помощью свойства Name, как в выше приведенном примере, либо с помощью числового индекса, узнать или получить который можно с помощью свойства Index.

int index = dgv.Columns["dgvAge"].Index;
dgv.Columns[index].Width = 100;

Добавление нескольких колонок

Если Вам необходимо добавить сразу несколько колонок, то в таком случае вместо метода Add вы можете воспользоваться методом AddRange, например:

//создаём три колонки
DataGridViewTextBoxColumn dgvID = new DataGridViewTextBoxColumn();
dgvID.Name = "dgvID";
DataGridViewButtonColumn dgvBtn = new DataGridViewButtonColumn();
dgvBtn.Name = "dgvBtn";
DataGridViewComboBoxColumn dgvCBox = new DataGridViewComboBoxColumn();
dgvCBox.Name = "dgvCBox";
//добавляем колонки
dgv.Columns.AddRange(new DataGridViewColumn [] {dgvID, dgvBut, dgvCBox});
//либо
dgv.Columns.AddRange(new DataGridViewColumn[] { new DataGridViewTextBoxColumn(){Name = "dgvID"}, new DataGridViewButtonColumn() {Name = "dgvBtn"}, new DataGridViewComboBoxColumn() {Name = "dgvCBox"}});

три колонки

Читайте также:

10 комментариев

  1. саня says:

    админ подскажи как лучше добавлять столбцы,?делаю так, но очень долго? при добавлении строки все норм!

    dataGridView1.ColumnCount = (365);
    for (int i = 0; i < 365; i++)
    {
    dataGridView1.Columns[i].Width = 5;
    }
  2. саня says:

    точнее получается что сначала добавляются столбцы долговато и потом еще разме, можно как то это оптимизировать, ускорить? не откажусь от примера, спасибо!!!

  3. dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
    dataGridView1.ColumnCount = (365);
    for (int i = 0; i < 365; i++)
    {
    dataGridView1.Columns[i].Width = 5;
    }
  4. саня says:

    Админ, спасибо большое! еще вопрос, есть простенький пример, объединения заголовков столбцов, у меня 365 столбцов, покажи если сможешь пример объединения первых 31 заголовка, и в нем уже одном текст &#171;январь&#187;))))???

  5. Там нужно получить rectangle из ячейки и либо растянуть его, либо объединить с другим прямоугольником другой ячейки. Если успею, то завтра добавлю пример.

    По умолчанию объединить ячейки не получится, только самому рисовать.

  6. саня says:

    мне не к спеху, если сможешь, сделай пожалуйста, я просто хочу туда добавить месяца, соответствующие столбцам, т.е с 1 по 31 это январь.

    спасибо!!!! вот тут есть пример, но я его ваще не понимаю! может ты по нему сделаешь как то проще и с комментариями, что б лишнего не было!!! спасибо!!!!

  7. &#171;вот тут есть пример, но я его ваще не понимаю&#187;

    А что именно не понятно?

  8. саня says:

    ты не пробывал сделать как там? может ты с него уберешь лишнее? а точнее по нему сделаешь на 31 столбец

  9. саня says:

    админ а подскажи как это включить, двойной буфер обмена, чтоб не мерцал а не подлагивал datagridview, все ли здесь правильно и как использовать?

    void SetDoubleBuffered(Control c, bool value)
    {
    PropertyInfo pi = typeof(Control).GetProperty("DoubleBuffered", BindingFlags.SetProperty |
    BindingFlags.Instance    |
    BindingFlags.NonPublic);
    if (pi != null)
    {
    pi.SetValue(c, value, null);
    MethodInfo mi = typeof(Control).GetMethod("SetStyle", BindingFlags.Instance     |
    BindingFlags.InvokeMethod |
    BindingFlags.NonPublic);
    if (mi != null)
    {
    mi.Invoke(c, new object[] { ControlStyles.UserPaint            |
    ControlStyles.AllPaintingInWmPaint |
    ControlStyles.OptimizedDoubleBuffer, true });
    }
    mi = typeof(Control).GetMethod("UpdateStyles", BindingFlags.Instance     |
    BindingFlags.InvokeMethod |
    BindingFlags.NonPublic);
    if (mi != null)
    {
    mi.Invoke(c, null);
    }
    }
    }
  10. public static void SetDoubleBuffered(Control control)
    {
    typeof(Control).InvokeMember("DoubleBuffered", BindingFlags.SetProperty |
    BindingFlags.Instance |
    BindingFlags.NonPublic,
    null, control, new object[] { true });
    }
    public Form1()
    {
    InitializeComponent();
    SetDoubleBuffered(dataGridView1);
    }

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*