2009-06-26 5 views
1

J'ai un contrôle GridView lié à un ObjectDataSource qui retourne une liste d'objets qui ressemblent à ceci:asp.net (C#): obtenir la valeur d'un champ non affiché à partir d'une sélection gridview

public class X { 
    public string DisplayName { 
     get; 
    } 
    public string Guid { 
     get; 
    } 
} 

I ne souhaite pas afficher la propriété Guid dans GridView, mais je dois la récupérer lorsqu'un objet est sélectionné.
Impossible de trouver une propriété "DataValueField", comme pour le contrôle ListBox.
Pour contourner ce problème, j'ai essayé de mettre Visible=false pour la colonne liée à la propriété Guid et obtenir le texte de la cellule de l'objet dans la méthode SelectedIndexChanged:

protected void GridView1_SelectedIndexChanged(object sender,EventArgs e){ 
    GridViewRow row = GridView1.SelectedRow; 
    string id = row.Cells[2].Text; // empty 
} 

Mais cela ne fonctionne pas - apparemment si la colonne n'est pas visible sa propriété Text est laissée vide.

Comment puis-je obtenir le Guid de l'objet sélectionné tout en affichant seulement le DisplayName? Vous ne pouvez pas utiliser row.DataItem pour obtenir l'objet lui-même?

Répondre

4

Vous ne savez pas comment cela fonctionne avec ObjectDataSource, mais avec SqlDataSource nous définissons des clés sur les lignes de GridView.

GridView1.DataKeyNames = new String[] {"Guid"}; 

Ensuite, vous pouvez obtenir la clé en faisant ceci:

string guid = GridView1.DataKeys[GridView1.SelectedRow.RowIndex]; 
+0

Merci, c'est ce que je cherchais! –

0

+0

Dans mon cas, row.DataItem est null ... comment est supposé fonctionner? –

+0

Le DataItem n'est pas conservé en postback, je suppose que vous devriez l'obtenir sur un événement de liaison de données ou quelque chose comme ça. L'autre réponse est la meilleure dans votre scénario. –

1

Ajouter "Guid" dans la propriété DataKeyNames du GridView. Cela lui permettra d'être disponible même si la colonne est cachée.

+0

En fait, vous pouvez même supprimer la colonne ... –

Questions connexes