Récupérer des données à partir visibles faux BoundField de contrôle Gridview
J'ai cette BoundField
dans un GridView
<asp:BoundField DataField="ReportId" HeaderText="RId" Visible="false" />
Mais quand j'essaie d'obtenir le texte dans ce champ, elle retourne vide.
protected void gvwReports_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "ViewSchedule")
{
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = gvwReports.Rows[index];
string s = row.Cells[0].Text;
}
}
mais, il renvoie une valeur correcte si je change BoundField's
.Visible
propriété true
- Je pense à certains d'optimisation qui se passe derrière les coulisses et la liaison n'a pas lieu jusqu'à ce qu'il devienne visible.
- pouvez-vous essayer à l'aide d'un simple code html de style display none
- Je viens de lier la source de données en mode normal. aussi n'avez pas beaucoup de experiese de contrôle Gridview.
- Le
Visible="false"
ne pas "cacher" ce domaine sur le client, il n'a même pas d'envoyer les données vers le bas de le client. Il est donc impossible de le récupérer de le client. Donc au lieu de mettreVisible="false"
, utiliser unCssClass
qui va le cacher de la vue sur le client, mais les données seront toujours là. Ensuite, les données seront de nouveau disponibles côté serveur sur une publication. Juste comme FROID, DIT le suggère, mais sans la faute de frappe 🙂 et n'oubliez pas de régler la visibilité de l'en-tête.
Vous devez vous connecter pour publier un commentaire.
essayer somethink comme ceci en utilisant côté client html pour masquer
Bien que c'est une année vieille question (en fait exactement un an), voici une autre solution sans l'aide de CssClass.
Juste après la databind, définir la visibilité de la colonne désirée à false.
Cela permettra de maintenir les données dans l'état d'affichage, mais ne créera pas de balisage de la page.
la première solution fonctionne correctement, mais il était nécessaire d'ajouter HeaderStyle pour masquer l'en-tête de cette colonne
Selon mes informations quand vous avez fait le champ lié invisible, alors vous ne pouvez pas y accéder. Essayez d'utiliser TemplateField
J'ai juste eu le même problème.
Curieusement un DataGrid n'aurez pas ce problème, il vous permettra d'accéder aux données de colonnes masquées, même si elle n'est pas même se rendre dans le client, car il ajoute encore l'information des colonnes masquées à l'état d'affichage.
Un GridView d'autre part tout simplement ignorer les champs masqués même si vous définissez la propriété EnableViewState à vrai. La seule façon est de laisser les informations pour le client de le cacher avec une propriété de style, comme display: none;.
Malheureux vraiment, j'ai aimé la grille de comportement, mais GridView a d'autres avantages.
Semble que si une colonne GridView est marqué comme n'étant pas visible, il n'est pas remplie au moment de l'exécution de sorte qu'il ne retourne rien. Donc, j'ai juste rempli la lien Hypertexte à partir de la DataView qui est lié à la Gridview se souvenir de déclarer la DataView partagés.
Je l'ai fait en VB asp.net pour un GridView qui trouve cherché des événements à partir d'une base de données de calendrier.
Cela a très bien fonctionné pour moi!
Cela a fonctionné pour moi:
Si la colonne est nommée DataKeyValue sur votre grille, vous pouvez lancer l'e.Article expédié à partir de la ligne comme un DataGridItem et appeler sa DataKeyValue. Vous aurez besoin pour le convertir en Int, String, quelle que soit, mais il sera là, même si la colonne est visible=false.
À rowDataBound événement, vous pouvez accéder à la valeur du champ en utilisant quelque chose comme:
même si votre boundfield la visibilité est définie sur false.