Определить тип столбца DataGridView программно - PullRequest
5 голосов
/ 16 октября 2011

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

Вот мой код:

foreach (DataGridViewColumn column in this.dataGrid.Columns)
{
???
//i.e. column.type  = checkbox
}

Как определить тип столбца в этом foreachпетля

Ответы [ 6 ]

8 голосов
/ 16 октября 2011

Я не уверен на 100%, что понимаю ваш вопрос, но вы можете указать тип столбца при создании столбца:

foreach (var definition in columnDefinitions)  // Some list of what the column types are
{
    var columnSpec = new DataColumn
        {
            DataType = definition.Type, // This is of type System.Type
            ColumnName = defintion.Name // This is of type string
        };

    this.dataGrid.Columns.Add(columnSpec);
}

Если вам нужно изменить типкак только он был создан - вы не можете сделать это.Лучшее, что вы можете сделать, это удалить столбцы и воссоздать их с новыми типами.

6 голосов
/ 25 февраля 2013

Если мы рассмотрим ваш пример;

foreach (DataGridViewColumn column in this.dataGrid.Columns)
{
    column.ValueType = typeof(DateTime);
}

Но, предполагая, что вы не хотите, чтобы все столбцы в вашей таблице данных имели одинаковый тип;

this.datagrid.Columns[0].ValueType = typeof(Int32);
this.datagrid.Columns[1].ValueType = typeof(String);
this.datagrid.Columns[2].ValueType = typeof(DateTime);

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

2 голосов
/ 13 октября 2014

Я предполагаю, что вы имеете в виду, когда вы создаете DataGridView. В этом случае вы можете определить его в DataTable и подключить к источнику данных dgv:

Например:

var columns = new List<Tuple<string, string>>();
columns.Add(new Tuple<string, string>("Name", "System.String"));
columns.Add(new Tuple<string, string>("Selected", "System.Boolean"));
columns.Add(new Tuple<string, string>("Id", "System.Int32"));
var table = new DataTable();
columns.ForEach(c => table.Columns.Add(new DataColumn(c.Item1) { DataType = Type.GetType(c.Item2) }));
var dgv = new DataGridView();
dgv.DataSource = table;
2 голосов
/ 16 октября 2011

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

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

Ниже приведен пример создания столбца с флажком:

DataGridViewCheckBoxColumn col = new DataGridViewCheckBoxColumn()
dataGridView1.Columns.Add(col);

Без дополнительной информации о том, что определяет ваш столбец.типы, которые трудно дать больше советов, но вы можете легко использовать эту технику с DataTable, проверяя тип каждого из его столбцов или даже используя отражение над объектом, с которым вы связываете представление данных.

1 голос
/ 16 октября 2011

Вы также можете назначить столбец кнопки, и вы можете назначить свойства также, как это

    DataGridViewButtonColumn column = new DataGridViewButtonColumn();
    datagridview1.Columns.Add(column);
    column.FlatStyle = FlatStyle.System;
    column.DefaultCellStyle.ForeColor = Color.ForestGreen;          
0 голосов
/ 02 марта 2018

Если вы используете BindingSource

var cbox = new DataGridViewCheckBoxColumn // Modify column type
{
    AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells,
    DataPropertyName = dgv.Columns["ColumnWantToChange"].Name, 
    HeaderText = "SOME HEADER NAME"
};
dgv.Columns.Add(cbox); // Add new 
var r = dgv.Columns.OfType<DataGridViewTextBoxColumn>().Where(x => x.Name == "ColumnWantToChange").FirstOrDefault();
dgv.Columns.Remove(r); // Remove the original column
...