Come hide una colonna (GridView) ma ancora accedere al suo valore?

Ho un GridView con un DataSource (database SQL). Voglio hide una colonna, ma posso ancora accedere al valore quando seleziono il record. Qualcuno può mostrarmi come si fa?

Questa è la colonna che voglio hide e voglio comunque accedere al suo valore:

  

Ho provato tutto per hide la colonna (proprietà Visible="false" ), ma non posso accedere al suo valore.

Se non sbaglio, GridView non mantiene i valori di BoundColumns che hanno l’attributo visible="false" . Due cose che puoi fare qui, una (come spiegato nella risposta di V4Vendetta) per usare Datakeys . O puoi cambiare la tua BoundColumn in un TemplateField . E nel ItemTemplate , aggiungi un controllo come Label , rendi la sua visibilità falsa e dai il tuo valore a Label .

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

Definisci uno stile in css:

 .hiddencol { display: none; } 

Quindi aggiungi l’ ItemStyle-CssClass="hiddencol" e l’ HeaderStyle-CssClass="hiddencol" al campo della griglia:

  

Puoi usare DataKeys per recuperare il valore di tali campi, perché (come hai detto tu) quando imposti un normale BoundField come visibile falso non puoi ottenere il loro valore.

Nel file .aspx , impostare la proprietà GridView

 DataKeyNames = "Outlook_ID" 

Ora, in un gestore di eventi puoi accedere al valore di questa chiave in questo modo:

 grid.DataKeys[rowIndex]["Outlook_ID"] 

Questo ti darà l’id al rowindex specificato della griglia.

Puoi farlo a livello di codice:

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

In questo modo si imposta la colonna su visibile prima del collegamento dati, quindi la colonna viene generata. L’utente imposta la colonna su non visibile, quindi non viene visualizzata.

Se si dispone di un TemplateField all’interno delle colonne di GridView e si dispone, ad esempio, di un controllo denominato blah associato ad esso. Quindi posiziona outlook_id come HiddenField questo modo:

   Existing Control    

Ora, prendi la riga nell’evento in cui vuoi l’ outlook_id e poi accedi al controllo.
Per RowDataBound accedi come:

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

Torna indietro, se hai problemi ad accedere alla riga cliccata. E non dimenticare di menzionare l’evento a cui vorresti accedervi.

È ansible rendere la colonna hidden sul lato server e per qualche motivo questo è diverso dal farlo il codice aspx . Può ancora essere referenziato come se fosse visibile. Basta aggiungere questo codice al tuo evento 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; } } 

Lascia le colonne visibili prima di riempire il GridView . Riempi il GridView e quindi nascondi le colonne.

Ecco come ottenere il valore di una colonna nascosta in un GridView impostato su Visible=False : aggiungi il campo dati in questo caso SpecialInstructions alla proprietà DataKeyNames del GridView associato e accedici in questo modo.

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

È tutto, funziona ogni volta molto semplice.

Ho usato un metodo simile a user496892:

 SPBoundField hiddenField = new SPBoundField(); hiddenField.HeaderText = "Header"; hiddenField.DataField = "DataFieldName"; grid.Columns.Add(hiddenField); grid.DataSource = myDataSource; grid.DataBind(); hiddenField.Visible = false; 

Ho una nuova soluzione per hide la colonna sul lato client usando css o javascript o jquery .

 .col0 { display: none; } 

E imposta gvClientDetails.Columns[0].Visible = true; , Se si imposta su false .

Puoi farlo codice dietro.

Set visible= false per le colonne dopo l’associazione dei dati. Dopodiché puoi nuovamente visualizzare la visibilità ” true ” nella funzione row_selection dalla griglia. Funzionerà !!

Quando voglio accedere ad un valore da GridView prima che GridView fosse visualizzato.

  1. Ho un BoundField e lego DataField nomalmente.
  2. Nell’evento RowDataBound , RowDataBound alcuni processi in quell’evento.
  3. Prima che GridView fosse visualizzato, scrivo questo:

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