Не удалось заполнить DataGridView - PullRequest
3 голосов
/ 29 июня 2011

Я заполнен DataGridView из DataTable, но получаю следующую ошибку:

хотя бы один из DataGridView столбцы элемента управления не имеют шаблона ячейки

private void PopulateGridView(DataTable dt)
        {

            if (dt != null)
            {
                dataGridView1.Columns.Clear();
                dataGridView1.DataSource = null;

                foreach (DataColumn col in dt.Columns)
                {
                    //Declare the bound field and allocate memory for the bound field.
                    DataGridViewColumn datacolumn = new DataGridViewColumn();

                    //Initalize the DataField value.
                    datacolumn.DataPropertyName = col.ColumnName;

                    datacolumn.Name = col.ColumnName;

                    //Initialize the HeaderText field value.
                    datacolumn.HeaderText = col.ColumnName;


                    //Add the newly created bound field to the GridView.
                    this.dataGridView1.Columns.Add(datacolumn); // ** Error **
            }

                //Initialize the DataSource
                this.dataGridView1.DataSource = dt;
            }

Ответы [ 4 ]

4 голосов
/ 29 июня 2011

Вы видите ошибку, потому что вы добавляете базовый тип столбца DataGridViewColumn, которому не назначен шаблон ячейки.Если бы DataGridView попытался назначить новую ячейку для этого столбца, он не знал бы, что делать.

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

DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
datagridview1.Columns.Add(col);

или

DataGridViewColumn col= new DataGridViewColumn();
DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell();

col.CellTemplate = cell;
datagridview1.Columns.Add(col);

Существует несколько доступных типов столбцов.

Однако что вы, вероятно, хотите сделать, - это позволить столбцам автоматически генерироваться,Если для свойства DataGridView столбцы AutoGenerate установлено значение true (по умолчанию), столбцы создаются при назначении источника данных.

Часто полезно добавлять столбцы программным способом (например, добавление столбца с флажком для выбора строк)но в этом случае вам не нужно этого делать.

3 голосов
/ 29 июня 2011

Как ASPMapper сказано в комментарии ниже исходного вопроса, просто установите его. Вам даже не нужно очищать колонки перед рукой:

private void PopulateGridView(DataTable dt)
{
  dataGridView1.DataSource = dt;
  // notice if your DataTable is null, it simply clears the DataGridView control
}
2 голосов
/ 29 июня 2011

ваш код дает сбой, потому что DataGridViewColumn не предоставляет шаблон ячейки ...

Может быть, вы хотите использовать один из них? (вместо базы DataGridViewColumn)

DataGridViewButtonColumn
DataGridViewCheckBoxColumn
DataGridViewComboBoxColumn
DataGridViewImageColumn
DataGridViewLinkColumn
DataGridViewTextBoxColumn

с другой стороны ... DataGridView способен автоматически создавать столбцы во время выполнения, когда предоставляется новый источник данных ...

1 голос
/ 29 июня 2011
private void PopulateGridView(DataTable dt)
{


    if (dt != null)
    {
        dataGridView1.Columns.Clear();
        dataGridView1.DataSource = null;

        dataGridView1.AutoGenerateColumns = true;

        this.dataGridView1.DataSource = dt;
            }
        }
}
}

делает работу за меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...