Je voudrais changer la valeur de ma colonne GridView en actif lorsque la valeur est 1.
J'ai une colonne GridView comme et cs code p> Ceci fonctionne, mais cela échouerait si je modifie la commande de colonne.
Ce dont j'ai besoin, c'est quelque chose comme la fonction de FindControl.
Merci. P> p>
3 Réponses :
Vous pouvez boucler toutes les colonnes pour obtenir l'index correct ou utiliser ce LINQ:
String colToFind = "status"; int colIndex = ((GridView)sender).Columns.Cast<DataControlField>() .Where((c, index) => c.HeaderText.ToLower().Equals(colToFind)) .Select((c,index)=>index).First();
Voici quelques utilitaires que j'ai écrites il y a des années qui peuvent vous aider:
// ---- 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; }
Pour la première fonction getcellbyname code>, qui devrait être appelé que lorsque c'est le type de ligne d'en-tête:
e.row.rowtype == DataControlrowtType.header code>
@Davidfreitas ne le pense pas. Il utilise le datacontrolfrolfield d'une cellule donnée.
Nettoyant plus facile à lire Linq. Tim n'a pas fonctionné pour moi.