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.
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
.
<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);
}
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" />
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.
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.
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.
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;
}
}
Laissez les colonnes visibles avant de remplir le GridView
. Remplissez le GridView
puis masquez les colonnes.
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.
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
.
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;
Quand je veux accéder à une valeur de GridView
avant que GridView
ne soit apparu.
BoundField
et je lie DataField
nomnellement.RowDataBound
événement, je fais un processus dans cet événement.Avant que GridView
apparaisse j'écris ceci:
protected void GridviewLecturer_PreRender(object sender, EventArgs e)
{
GridviewLecturer.Columns[0].Visible = false;
}
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 !!