2012-02-19 19 views
5

me gustaría cambiar el valor de mi columna gridview a activa cuando el valor es 1. tengo columna de GridView como¿Cómo acceder a una columna de gridview en rowdatabound?

<asp:BoundField DataField="STATUS" HeaderText="STATUS" SortExpression="STATUS" HeaderStyle-HorizontalAlign="Left"> 
       <HeaderStyle HorizontalAlign="Left"></HeaderStyle> 
      </asp:BoundField> 

y CS código

protected void gvCategory_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 

     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      if (e.Row.Cells[5].Text=="0") 
      { 
       e.Row.Cells[5].Text = "INACTIVE"; 
      } 
     } 
    } 

Esto está trabajando pero sería fallar si cambio el orden de las columnas. Lo que necesito es algo así como la función findControl. Gracias.

Respuesta

15

Aquí hay unas pocas utilidades que escribí hace años que pueden ayudarle a:

// ---- GetCellByName ---------------------------------- 
// 
// pass in a GridViewRow and a database column name 
// returns a DataControlFieldCell or null 

static public DataControlFieldCell GetCellByName(GridViewRow Row, String CellName) 
{ 
    foreach (DataControlFieldCell Cell in Row.Cells) 
    { 
     if (Cell.ContainingField.ToString() == CellName) 
      return Cell; 
    } 
    return null; 
} 

// ---- GetColumnIndexByHeaderText ---------------------------------- 
// 
// pass in a GridView and a Column's Header Text 
// returns index of the column if found 
// returns -1 if not found 

static public int GetColumnIndexByHeaderText(GridView aGridView, String ColumnText) 
{ 
    TableCell Cell; 
    for (int Index = 0; Index < aGridView.HeaderRow.Cells.Count; Index++) 
    { 
     Cell = aGridView.HeaderRow.Cells[Index]; 
     if (Cell.Text.ToString() == ColumnText) 
      return Index; 
    } 
    return -1; 
} 

// ---- GetColumnIndexByDBName ---------------------------------- 
// 
// pass in a GridView and a database field name 
// returns index of the bound column if found 
// returns -1 if not found 

static public int GetColumnIndexByDBName(GridView aGridView, String ColumnText) 
{ 
    System.Web.UI.WebControls.BoundField DataColumn; 

    for (int Index = 0; Index < aGridView.Columns.Count; Index++) 
    { 
     DataColumn = aGridView.Columns[Index] as System.Web.UI.WebControls.BoundField; 

     if (DataColumn != null) 
     { 
      if (DataColumn.DataField == ColumnText) 
       return Index; 
     } 
    } 
    return -1; 
} 
+0

Por primera función 'GetCellByName', que sólo debe ser llamado cuando es el encabezado de tipo de fila:' e.Row.RowType == DataControlRowType.Header' –

+0

@DavidFreitas no lo creo. Utiliza el DataControlField subyacente de una celda determinada. –

3

Se podría bucle de todas las columnas para obtener el índice correcto o usar este LINQ:

String colToFind = "status"; 
int colIndex = ((GridView)sender).Columns.Cast<DataControlField>() 
       .Where((c, index) => c.HeaderText.ToLower().Equals(colToFind)) 
       .Select((c,index)=>index).First(); 
0

limpiador más fácil de leer LINQ. Tim no funcionó para mí.

private int GetFirstGridViewColIndex(string dataField, object sender) 
{ 
    var boundFieldColumns = ((GridView)sender).Columns.Cast<BoundField>(); 

    return boundFieldColumns.Where((column, index) => string.Equals(column.DataField, dataField, StringComparison.InvariantCultureIgnoreCase)) 
     .Select((column, index) => index) 
     .First(); 
} 
Cuestiones relacionadas