2011-07-07 39 views
12

Tengo un formulario con un widget DataGridView y necesito obtener el índice de la columna con el nombre seleccionado.datagridview columna índice

Por ejemplo, digamos que tengo una tabla con 2 columnas: Nombre, Apellido. Necesito una forma de obtener el índice del nombre de la columna. El problema es que cambia todo el tiempo dependiendo del DataSource, pero esa columna siempre tiene el mismo nombre "Nombre".

¿Alguien sabe cómo resolver el problema?

Respuesta

21

Para recuperar una columna DataGridView por su nombre simplemente referencia a él a través del indexador colección de columnas:

datagridview1.Columns["columnName"] 

entonces se puede obtener el índice de columna de la columna:

datagridview1.Columns["columnName"].Index; 

Ten en cuenta que si utiliza un nombre de columna no válido, entonces esta referencia devolverá nulo, por lo que es posible que desee verificar que la referencia de la columna no sea nula antes de usarla, o utilice primero el método de recopilación de columnas .Contains().

+1

sólo para estar seguro (para otros usuarios) debe comprobar si existe la primera columna: DataGridView1 .Columns.Contains ("ColumnName") – ginalster

+0

@ginalster Gracias - buen punto, lo he agregado a la respuesta. –

+1

¿Cómo es que esto todavía no es una respuesta aceptada? – Neolisk

0

Si estoy en lo cierto, e.ColumnIndex también funcionará para esto. se puede comprobar la documentación de MSDN here

0

Usted puede obtener el índice utilizando the Index property of the DataGridViewColumn widget, como tal:

ColumnName.Index 

Esto evita la necesidad de comprobar si el nombre de la columna es válida en tiempo de ejecución ya que generará un error de compilación si la columna no existe. Esto también hace que la refactorización sea más fácil.

Le recomiendo que le dé a las columnas un nombre razonable (por ejemplo DCOL_SomeName) para que pueda distinguirlas fácilmente. Incluir el nombre del widget DataGridView ayudaría si tiene múltiples widgets DataGridView en el mismo formulario.

0

crear una clase estática por debajo del código de

public static class MyTools 
{ 
    public static int IndexByName(this DataGridView dgv, string name) 
    { 
     foreach(DataGridViewColumn col in dgv.Columns) 
     { 
      if(col.HeaderText.ToUpper().Trim() == name.ToUpper().Trim()) 
      { 
       return col.Index; 
      } 
     } 
     return -1; 
    } 
} 

y luego lo llaman con su dataGridView

int index = datagridview1.IndexByName("columnName"); 
Cuestiones relacionadas