Saltar al contenido

Cómo obtener el valor de la celda por nombre de columna, no por índice en GridView en asp.net

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *