47 votes

Comment obtenir la valeur de la cellule par nom de colonne et non par index dans GridView dans asp.net

J'ai un gridview dans asp.net et maintenant je veux la valeur de la cellule par le nom de la colonne mais pas par l'index de la cellule.

Comment serait-ce possible en récupérant la valeur de la cellule par le nom de la colonne de cellule

4voto

Sadiq Points 427

Bien que ce soit long, mais ce morceau de code relativement petit semble facile à lire et à obtenir :

 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;
       }
    }
}

3voto

Daniel Nutu Points 21

Vous pouvez utiliser le DataRowView pour obtenir l'index de la colonne.

     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);
            }
        }
    }

2voto

Circle Hsiao Points 1279

Pour les amoureux de lambda

 protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var boundFields = e.Row.Cells.Cast<DataControlFieldCell>()
            .Select(cell => cell.ContainingField).Cast<BoundField>().ToList();

        int idx = boundFields.IndexOf(
            boundFields.FirstOrDefault(f => f.DataField == "ColName"));

        e.Row.Cells[idx].Text = modification;        
    }
}

2voto

Mohan Points 43

Les cellules de la ligne d'en-tête ne fonctionneront parfois pas. Cela renverra simplement la colonne Index. Cela vous aidera de différentes manières. Je sais que ce n'est pas la réponse qu'il demande. Mais cela aidera beaucoup de gens.

 public static int GetColumnIndexByHeaderText(GridView gridView, string columnName)
    {      
        for (int i = 0; i < gridView.Columns.Count ; i++)
        {
            if (gridView.Columns[i].HeaderText.ToUpper() == columnName.ToUpper() )
            {
                return i;
            }
        }     
        return -1;
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X