2011-10-15 56 views
5

Necesito una forma en la que pueda definir el tipo de columna en tiempo de ejecución.Definir tipo de columna DataGridView Programmatically

Aquí está mi código:

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

¿Cómo puedo definir el tipo de columna en este bucle foreach?

+0

Por cierto, ver http: //meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts –

+0

@JohnSaunders Gracias, pero ¿hay alguna solución? – funerr

+0

Si supiera la respuesta, la habría respondido. –

Respuesta

8

No estoy 100% seguro de que entiendo que usted cuestione, pero se puede especificar el tipo de columna cuando crear la columna:

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); 
} 

Si necesita cambiar el tipo una vez que se ha creado - no puedes hacer eso Lo mejor que puede hacer es borrar las columnas y recrearlas con los nuevos tipos.

2

No se puede cambiar el tipo de una columna DataGridView después de haberla creado, pero no hay nada que le impida crear columnas según sea necesario en tiempo de ejecución.

De modo que, dependiendo de la lógica, determina el tipo de cada columna, crea columnas según sea necesario y las agrega a DataGridView.

Un ejemplo de la creación de una columna de casilla es a continuación:

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

Sin más información sobre lo que determina sus tipos de columna que es difícil dar más consejos, pero se puede usar esta técnica con facilidad con un DataTable, inspeccionando el tipo de cada una de sus columnas, o incluso utilizando la reflexión sobre un objeto al que está vinculando la vista de tabla de datos.

1

puede asignar la columna y botón también puede asignar propiedades también como esto

DataGridViewButtonColumn column = new DataGridViewButtonColumn(); 
    datagridview1.Columns.Add(column); 
    column.FlatStyle = FlatStyle.System; 
    column.DefaultCellStyle.ForeColor = Color.ForestGreen;   
5

Si tenemos en cuenta su ejemplo;

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

Pero, suponiendo que no desea que todas las columnas de DataGridView a ser del mismo tipo;

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

Esto es especialmente útil cuando utiliza una fuente de datos y no agrega sus propias columnas de forma programática.

2

Supongo que quiere decir cuando crea DataGridView. En ese caso se puede definir en un DataTable y conectarlo a la fuente de datos de vgd:

Por ejemplo:

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; 
0

Suponiendo Your'e usando 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 
Cuestiones relacionadas