web-dev-qa-db-fra.com

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

J'ai un GridView avec un DataSource (base de données SQL). Je souhaite masquer une colonne, mais je peux quand même accéder à la valeur lorsque je sélectionne l'enregistrement. Quelqu'un peut-il me montrer comment faire cela?

Voici la colonne que je veux masquer et que je souhaite toujours accéder à 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.

69
SamekaTV

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

44
futile
<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);
}
80
Mubashir Ahmed

Définir un style en css:

.hiddencol { display: none; }

Ajoutez ensuite le ItemStyle-CssClass="hiddencol" et le HeaderStyle-CssClass="hiddencol" attribut au champ de la grille:

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

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

Dans le fichier .aspx, Définissez la propriété GridView

DataKeyNames = "Outlook_ID"

Maintenant, dans un gestionnaire d’événements, vous pouvez accéder à la valeur de cette clé comme ceci:

grid.DataKeys[rowIndex]["Outlook_ID"]

Cela vous donnera l'identifiant à l'index spécifié de la grille.

33
V4Vendetta

Vous pouvez le faire par programme:

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

De cette manière, vous définissez la colonne sur visible avant la liaison de données, de sorte que la colonne soit générée. Vous définissez la colonne sur non visible, de sorte qu'elle ne soit pas affichée.

20
user496892

Si vous avez un TemplateField dans les colonnes de votre GridView et que vous avez, disons, un contrôle nommé blah qui lui est lié. Puis placez le Outlook_id comme HiddenField comme ceci:

<asp:TemplateField HeaderText="OutlookID">
    <ItemTemplate>
        <asp:Label ID="blah" runat="server">Existing Control</asp:Label>
        <asp:HiddenField ID="HiddenOutlookID" runat="server" Value='<%#Eval("Outlook_ID") %>'/>
    </ItemTemplate>
</asp:TemplateField>

Maintenant, prenez la ligne dans le cas où vous voulez le Outlook_id puis accédez au contrôle.
For RowDataBound y accéder comme suit:

string outlookid = ((HiddenField)e.Row.FindControl("HiddenOutlookID")).Value;

Revenez si vous avez des difficultés à accéder à la ligne cliquée. Et n'oubliez pas de mentionner l'événement auquel vous souhaitez accéder.

10
naveen

Vous pouvez créer la colonne hidden du côté serveur. Pour une raison quelconque, cela diffère du code aspx. Il peut toujours être référencé comme s'il était visible. Ajoutez simplement ce code à votre événement OnDataBound.

protected void gvSearchResults_DataBound(object sender, EventArgs e)
{
    GridView gridView = (GridView)sender;

    if (gridView.HeaderRow != null && gridView.HeaderRow.Cells.Count > 0)
    {
        gridView.HeaderRow.Cells[UserIdColumnIndex].Visible = false;
    }

    foreach (GridViewRow row in gvSearchResults.Rows)
    {
        row.Cells[UserIdColumnIndex].Visible = false;
    }
}
8
Ben Foster

Laissez les colonnes visibles avant de remplir le GridView. Remplissez le GridView puis masquez les colonnes.

4
rube

Voici comment obtenir la valeur d'une colonne masquée dans un GridView défini sur Visible=False: ajoutez le champ de données dans ce cas SpecialInstructions à la propriété DataKeyNames du GridView lié et accédez-y de cette façon.

txtSpcInst.Text = GridView2.DataKeys(GridView2.SelectedIndex).Values("SpecialInstructions")

Ca y est, ça marche à chaque fois, c'est très simple.

2
Benchmark

J'ai une nouvelle solution cacher la colonne du côté client en utilisant css ou javascript ou jquery.

.col0
{
  display: none;
}

Et mettre gvClientDetails.Columns[0].Visible = true;, Si vous définissez sur false.

2
mukund

J'ai utilisé une méthode similaire à user496892:

SPBoundField hiddenField = new SPBoundField();
hiddenField.HeaderText = "Header";
hiddenField.DataField = "DataFieldName";
grid.Columns.Add(hiddenField);

grid.DataSource = myDataSource;
grid.DataBind();

hiddenField.Visible = false;
1
Amy Struck

Quand je veux accéder à une valeur de GridView avant que GridView ne soit apparu.

  1. J'ai un BoundField et je lie DataField nomnellement.
  2. Dans RowDataBound événement, je fais un processus dans cet événement.
  3. Avant que GridView apparaisse j'écris ceci:

    protected void GridviewLecturer_PreRender(object sender, EventArgs e) 
    {
        GridviewLecturer.Columns[0].Visible = false;
    }
    
0
Mitr Raiputta

Vous pouvez le faire code derrière.

Set visible= false pour les colonnes après la liaison de données. Après cela, vous pouvez à nouveau faire la visibilité "true" dans sélection_ligne à partir de la vue de grille. Cela fonctionnera !!

0
Abhisek