2009-05-26 6 views
2

J'ai un DataView qui a déjà été rempli avec des données (vérifié que ceci est vrai).GridView aucune colonne présente même après DataBind()

Ensuite, j'ai défini la source de données de mon GridView à cette DataView et appelé la fonction .DataBind().

Juste après la liaison, j'ai vérifié le nombre de colonnes de mon GridView (grid.Columns.Count) et il montre 0. Mais il montre la bonne sortie avec 15 colonnes. De même, l'accès à une colonne à l'aide de son index déclenchera une exception.

Comment puis-je accéder à la colonne alors?

Merci!

EDIT - Informations additionnelles:

j'ai réellement besoin d'ajouter un « glyphe » (flèche haut/bas) dans l'en-tête de colonne pour montrer ce que la colonne sont triées et sa direction. Le code ci-dessous est ce que j'utilise. Le problème est, le Columns.Count est toujours zéro.

for (int i = 0; i < dgData.Columns.Count; i++) 
    { 
     string colExpr = dgData.Columns[i].SortExpression; 
     if (colExpr != "" && colExpr == dgData.SortExpression) 
      item.Cells[i].Controls.Add(glyph); 
    } 

Répondre

2

Modifier

Essayez cela, il est un peu fugly car il repose sur le test du texte linkbutton contre le GridView SortExpression. L'ID Gridview est « test »

protected void test_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.Header) 
     { 
      foreach (TableCell tc in e.Row.Cells) 
      { 
       if(test.SortExpression.Contains((tc.Controls[0] as LinkButton).Text)) 
        tc.Controls.Add(glyph) 
      } 
     } 
    } 

Je ne pense pas que la collection de colonnes est défini si vous êtes auto générer les colonnes ...

Vous pouvez vérifier la Row.Cells.Count ou si vous avez besoin noms de colonnes, récupérer le HeaderRow, et itérer à travers les cellules & saisir leur valeur .Text.

Si le GridView est sortable (par exemple, a des liens cliquables dans l'en-tête, puis pour obtenir les noms de colonnes, vous devez vérifier

foreach(Row r in GridView.Rows) 
{ 
    if(r.RowType == HeaderRow) 
    { 
     r.Cells[0].Controls[0]; //Link Control is here. 
    } 
} 
+0

Salut, s'il vous plaît voir mon édition sur la question. J'ai besoin en fait la Propriété SortExpression de la colonne – Ian

+0

Bonjour, Que dois-je mettre dans le .Contains()? – Ian

Questions connexes