Esta es la solución más exacta que encomtrarás compartir, sin embargo estúdiala detenidamente y valora si es compatible a tu proyecto.
Solución:
GridView
no actúa como nombres de columna, ya que eso es datasource
propiedad de saber esas cosas.
Si aún necesita conocer el índice dado un nombre de columna, puede crear un método auxiliar para hacer esto como el gridview
El encabezado normalmente contiene esta información.
int GetColumnIndexByName(GridViewRow row, string columnName)
int columnIndex = 0;
foreach (DataControlFieldCell cell in row.Cells)
if (cell.ContainingField is BoundField)
if (((BoundField)cell.ContainingField).DataField.Equals(columnName))
break;
columnIndex++; // keep adding 1 while we don't have the correct name
return columnIndex;
recuerda que el código anterior usará un BoundField
… entonces úsalo como:
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
if (e.Row.RowType == DataControlRowType.DataRow)
int index = GetColumnIndexByName(e.Row, "myDataField");
string columnValue = e.Row.Cells[index].Text;
Le sugiero encarecidamente que utilice el TemplateField
para tener sus propios controles, entonces es más fácil agarrar esos controles como:
y luego usar
string columnValue = ((Label)e.Row.FindControl("lblName")).Text;
Aunque es mucho tiempo, este fragmento de código relativamente pequeño parece fácil de leer y obtener:
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
int index;
string cellContent;
foreach (TableCell tc in ((GridView)sender).HeaderRow.Cells)
if( tc.Text.Equals("yourColumnName") )
index = ((GridView)sender).HeaderRow.Cells.GetCellIndex(tc);
cellContent = ((GridView)sender).SelectedRow.Cells[index].Text;
break;
Puede usar DataRowView para obtener el índice de la columna.
void OnRequestsGridRowDataBound(object sender, GridViewRowEventArgs e)
if (e.Row.RowType == DataControlRowType.DataRow)
var data = e.Row.DataItem as DataRowView;
// replace request name with a link
if (data.DataView.Table.Columns["Request Name"] != null)
// get the request name
string title = data["Request Name"].ToString();
// get the column index
int idx = data.Row.Table.Columns["Request Name"].Ordinal;
// ...
e.Row.Cells[idx].Controls.Clear();
e.Row.Cells[idx].Controls.Add(link);
Si te ha resultado útil este post, nos gustaría que lo compartas con otros juniors de este modo contrubuyes a dar difusión a nuestro contenido.