2012-07-14 12 views
6

ho questo BoundField in un GridViewRecuperare dati da visibile falsa BoundField di GridView

<asp:BoundField DataField="ReportId" HeaderText="RId" Visible="false" /> 

Ma quando cerco di testo in quel campo, si ritorna vuoto.

protected void gvwReports_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "ViewSchedule") 
    { 
     int index = Convert.ToInt32(e.CommandArgument); 
     GridViewRow row = gvwReports.Rows[index]; 
     string s = row.Cells[0].Text; 
    } 
} 

ma, restituisce un valore corretto se cambio BoundField's.Visible proprietà true

+0

Sto pensando qualche ottimizzazione sta accadendo dietro le quinte e l'associazione in realtà non luogo fino a quando non diventa visibile. –

+0

puoi provare a utilizzare solo un semplice display in stile html nessuno –

+0

@lc. Lego semplicemente la fonte dei dati in modo normale. inoltre non ho molta esperienza di Gridview. – Darshana

risposta

23

prova somethink come questo utilizzando HTML lato client per nascondere

<style type="text/css"> 
    .hidden 
    { 
     display:none; 
    } 
</style> 

<asp:BoundField DataField="ReportId" HeaderText="RId" > 
    <ItemStyle CssClass="hidden"/> 
</asp:BoundField> 
+0

+1 Non ho letto la tua risposta prima di pubblicare la mia. :) Toglierò il mio. – hmqcnoesy

+0

@hmqcnoesy buono, ho concordato con te che quando impostiamo visible = 'true' l'intera riga non viene inviata al client. –

+4

Di solito anche l'intestazione dovrebbe essere nascosta, quindi dobbiamo aggiungere HeaderStyle-CssClass = "hidden" al tag BoundField. – Saber

0

Secondo il mio knoweldge quando si ha reso invisibile il campo rilegato, quindi non puoi accedervi. Prova ad utilizzare TemplateField

0

Ho appena avuto lo stesso problema.

Stranamente un DataGrid non avrà questo problema, ti permetterà di accedere ai dati da colonne nascoste anche se non li rende nemmeno nel client, perché aggiunge ancora le informazioni delle colonne nascoste a il ViewState.

Un GridView d'altra parte semplicemente ignora i campi nascosti anche se si imposta la proprietà EnableViewState su true. L'unico modo è di lasciare le informazioni lì per il client da nascondere con una proprietà di stile, come la visualizzazione : nessuna;.

Sfortunatamente, mi è piaciuto il comportamento di DataGrid, ma GridView ha altri vantaggi.

4

Anche se è una domanda vecchia di un anno (in realtà esattamente un anno fa), ecco un'altra soluzione alternativa senza utilizzare CssClass.

Subito dopo il database, impostare la visibilità della colonna desiderata su false.

gridview1.databind() 
gridview1.columns(i).Visibile = False 

Ciò manterrà i dati in viewstate ma non creerà markup per la pagina.

0

Sembra che se una colonna GridView è contrassegnata come non visibile non viene popolata in fase di esecuzione in modo che non restituisca nulla. Quindi, ho appena inserito il collegamento ipertestuale dal DataView associato a Gridview ricordando di dichiarare il DataView come condiviso.

Ho fatto questo in VB asp.net per un GridView che trova gli eventi cercati da un database del calendario.

Questo ha funzionato alla grande per me!

Private Sub GridView1_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound 

    If (e.Row.RowType = DataControlRowType.DataRow) Then 

    Dim ThisHyperLink As HyperLink = e.Row.Cells(0).Controls(0) 
    Dim drvRow As DataRowView = dvFoundEvents.Item(e.Row.DataItemIndex) 

    EventID = drvRow("EventID") 
    ThisHyperLink.NavigateUrl = "<URL>?id=" + EventID 

    End If 

End Sub 
0

questo ha funzionato per me:

Se la colonna è un nome DataKeyValue sulla griglia, è possibile lanciare l'e.Item inviato dalla fila come un DataGridItem e chiamare la sua DataKeyValue. Dovrai convertirlo in Int, String, qualunque cosa ma sarà lì anche se la colonna è visibile = false.

0

Alla manifestazione RowDataBound è possibile accedere il valore del campo utilizzando qualcosa di simile:

(((DataRowView)e.Row.DataItem)["your_boundField_dataFieldName"]).ToString(); 

anche se la visibilità BoundField è impostata su false.

2

la prima soluzione funziona correttamente, ma era necessario aggiungere HeaderStyle per nascondere l'intestazione di questa colonna

<style type="text/css"> 
    .hidden 
    { 
     display:none; 
    } 
</style> 

<asp:BoundField DataField="ReportId" HeaderText="RId" > 
    <ItemStyle CssClass="hidden"/> 
    <HeaderStyle CssClass="hidden"/> 
</asp:BoundField> 
+0

Questo è corretto .. Grazie –

Problemi correlati