Masquer BoundField mais encore être en mesure d'obtenir des valeurs avec C#
J'ai un affichage de la grille et je suis en utilisant une variété de données:
<asp:BoundField DataField="Catagory" HeaderText="Support Catagory" SortExpression="Catagory" />
<asp:BoundField DataField="AppName" HeaderText="Application Name" SortExpression="IncidentNumber" />
<asp:BoundField DataField="IncidentNumber" HeaderText="Incident #" SortExpression="IncidentNumber" />
<asp:BoundField DataField="Hours" HeaderText="Hours" SortExpression="Hours" />
<asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
<asp:BoundField DataField="CreatedDate" HeaderText="Created Date" SortExpression="CreatedDate" />
<asp:BoundField DataField="PK_DailyTaskHours" HeaderText="" SortExpression="PK_DailyTaskHours" ReadOnly="true" />
<asp:BoundField DataField="PK_NonScrumStory" HeaderText="" SortExpression="PK_NonScrumStory" ReadOnly="true" />
Les deux dernières colonnes cependant je ne veux pas le montrer, je suis à l'aide afin que je puisse récupérer les clés primaires avec ce code C#:
string dailyTaskHoursPK = (string)e.Values["PK_DailyTaskHours"].ToString();
string nonScrumStoryPK = (string)e.Values["PK_NonScrumStory"].ToString();
SqlDataSource4.DeleteParameters["dailyTaskHoursPK"].DefaultValue = dailyTaskHoursPK;
SqlDataSource4.DeleteParameters["nonScrumStoryPK"].DefaultValue = nonScrumStoryPK;
Cependant, je ne veux pas afficher les deux dernières colonnes. Mais quand j'ai mis:
Visible="false"
Et essayez d'exécuter le programme, j'obtiens l'erreur suivante:
Objet de référence non définie à une instance d'un objet.
Description: Une exception non gérée s'est produite pendant l'exécution de la demande web actuelle. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et où elle a son origine dans le code.
Détails De L'Exception: System.NullReferenceException: la référence d'Objet n'est pas définie à une instance d'un objet.
Ce que je fais mal? Comment puis-je empêcher l'utilisateur de voir ces champs?
OriginalL'auteur David Tunnell | 2013-07-01
Vous devez vous connecter pour publier un commentaire.
Trevor est correcte, vous devez définir votre
DataKeyNames
comme ceci dans votre grille de données de balisage:Une fois que vous avez fait cela, vous pouvez obtenir les valeurs des chaînes de caractères comme ceci:
OriginalL'auteur hutchonoid
Essayer de les avoir Visible="true", mais les cacher avec les css.
Oui, je suis d'accord, le mien serait de travailler, mais votre solution est meilleure.
Cette approche a fonctionné pour moi - j'ai juste eu à appliquer la classe à la fois ItemStyle et la HeaderStyle. (Et j'ai besoin d'accéder à leurs valeurs sur le côté client, pas côté serveur.)
OriginalL'auteur Mikael Engver
Vous devez également définir le DataKeyNames propriété du contrôle de liaison de données. Paramètre visible à false va provoquer les champs pour ne pas être envoyé au client à moins que le champ est spécifié dans la DataKeyNames de la propriété. Voir la page msdn sur le DataControlField.Propriété Visible.
OriginalL'auteur Trevor
Lorsque vous souhaitez masquer une colonne et bénéficiez également de sa valeur, vous spécifiez
DataKeyNames
propriété pour GridView dans la page aspx.Ensuite, vous pouvez récupérer que la valeur de la colonne comme ci-dessous dans le code derrière.
OriginalL'auteur user704988
code ci-dessus cacher BoundField valeur mais pas de masquer headertext et miss match, tous les colonne, je vais donc un peu de changement belove
...
maintenant c'est du vrai travail
OriginalL'auteur jayesh dhameliya
essayez d'utiliser logiquement en utilisant une taille de police
par exemple
OriginalL'auteur Haseeb Ahmed