82 votes

Comment masquer une colonne (GridView) mais toujours accéder à sa valeur ?

J'ai un GridView avec un DataSource (base de données SQL). Je veux masquer une colonne, mais toujours être en mesure d'accéder à la valeur lorsque je sélectionne l'enregistrement. Quelqu'un peut-il me montrer comment faire ?

Il s'agit de la colonne que je souhaite masquer tout en ayant accès à sa valeur :

<asp:BoundField DataField="Outlook_ID" HeaderText="OutlookID" />

J'ai tout essayé pour cacher la colonne (propriété Visible="false" ), mais je ne peux pas accéder à sa valeur.

88voto

Mubashir Ahmed Points 191
<head runat="server">
<title>Accessing GridView Hidden Column value </title>
<style type="text/css">
  .hiddencol
  {
    display: none;
  }
</style>

<asp:BoundField HeaderText="Email ID" DataField="EmailId" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol" >
</asp:BoundField>

ArrayList EmailList = new ArrayList();
foreach (GridViewRow itemrow in gvEmployeeDetails.Rows)
{
  EmailList.Add(itemrow.Cells[YourIndex].Text);
}

0 votes

Voir netomatix.com/development/GridViewHideColumn.aspx pour une explication approfondie de cette solution.

3 votes

Cette solution présente l'avantage supplémentaire que les données sont toujours accessibles en javascript du côté client également. Ce devrait être la solution préférée à ce problème !

1 votes

Vous êtes une légende !

45voto

futile Points 656

Si je ne me trompe pas, GridView ne contient pas les valeurs de BoundColumns qui ont l'attribut visible="false" . Il y a deux choses que vous pouvez faire ici, l'une (comme expliqué dans la réponse de V4Vendetta) d'utiliser Datakeys . Ou vous pouvez changer votre BoundColumn à un TemplateField . Et dans le ItemTemplate ajoutez un contrôle comme Label , rend sa visibilité fausse et donne votre valeur à cet élément Label .

7 votes

Cela permet de masquer la colonne mais pas l'en-tête de la colonne. Comment allez-vous faire ?

2 votes

Ajoutez simplement <HeaderStyle CssClass="hidden" /> dans votre boundfield. Et définissez un style css comme ceci : .hidden { display:none ; }

45voto

Niloofar Points 134

Définir un style en css :

.hiddencol { display: none; }

Ensuite, ajoutez le ItemStyle-CssClass="hiddencol" et le HeaderStyle-CssClass="hiddencol" au champ de la grille :

<asp:BoundField DataField="ID" HeaderText="ID" ItemStyle-CssClass="hiddencol"  HeaderStyle-CssClass="hiddencol" ClientIDMode="Static" />

0 votes

Cette réponse est beaucoup plus efficace

38voto

V4Vendetta Points 15354

Vous pouvez utiliser les DataKeys pour récupérer la valeur de tels champs, car (comme vous l'avez dit) lorsque vous définissez un champ normal BoundField comme faux visibles, vous ne pouvez pas obtenir leur valeur.

Dans le .aspx définissent le GridView propriété

DataKeyNames = "Outlook_ID"

Maintenant, dans un gestionnaire d'événement, vous pouvez accéder à la valeur de cette clé comme suit :

grid.DataKeys[rowIndex]["Outlook_ID"]

Cela vous donnera l'identifiant à l'indice de rang spécifié dans la grille.

1 votes

Les DataKeys étaient destinées à cela

0 votes

Comment cela fonctionnerait-il si vous utilisiez des contrôles DataSource avec du code CRUD dans le HTML ?

25voto

user496892 Points 129

Vous pouvez le faire de manière programmatique :

grid0.Columns[0].Visible = true;
grid0.DataSource = dt;
grid0.DataBind();
grid0.Columns[0].Visible = false;

De cette façon, vous définissez la colonne comme visible avant de lier les données, de sorte que la colonne est générée. Vous définissez la colonne comme non visible, pour qu'elle ne soit pas affichée.

2 votes

Cela ne fonctionne pas du tout, j'obtiens ArrayOutOfBoundsException lorsque je place ce code dans une méthode PreRender du panneau.

2 votes

Cela a fonctionné pour moi de manière simple et facile.

0 votes

C'est de loin la meilleure réponse.

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