2013-07-01 5 views
7

ho una vista a griglia e sto usando una varietà di dati:Hide BoundField di, ma ancora in grado di ottenere i valori con C#

<asp:BoundField DataField="Catagory" HeaderText="Support Catagory" SortExpression="Catagory" /> 
<asp:BoundField DataField="AppName" HeaderText="Application Name" SortExpression="IncidentNumber" /> 
<asp:BoundField DataField="IncidentNumber" HeaderText="Incident #" SortExpression="IncidentNumber" /> 
<asp:BoundField DataField="Hours" HeaderText="Hours" SortExpression="Hours" /> 
<asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" /> 
<asp:BoundField DataField="CreatedDate" HeaderText="Created Date" SortExpression="CreatedDate" /> 
<asp:BoundField DataField="PK_DailyTaskHours" HeaderText="" SortExpression="PK_DailyTaskHours" ReadOnly="true" /> 
<asp:BoundField DataField="PK_NonScrumStory" HeaderText="" SortExpression="PK_NonScrumStory" ReadOnly="true" /> 

Le ultime due colonne però io non voglio mostrare, io sto usando in modo che io possa recuperare le chiavi primarie con questo codice C#:

string dailyTaskHoursPK = (string)e.Values["PK_DailyTaskHours"].ToString(); 
    string nonScrumStoryPK = (string)e.Values["PK_NonScrumStory"].ToString(); 
    SqlDataSource4.DeleteParameters["dailyTaskHoursPK"].DefaultValue = dailyTaskHoursPK; 
    SqlDataSource4.DeleteParameters["nonScrumStoryPK"].DefaultValue = nonScrumStoryPK; 

Tuttavia, non voglio per visualizzare ultime due colonne. Ma quando ho impostato:

Visible="false" 

e tenta di eseguire il programma ottengo il seguente errore:

riferimento oggetto non impostato a un'istanza di un oggetto.

Descrizione: si è verificata un'eccezione non gestita durante l'esecuzione della richiesta Web corrente. Si prega di rivedere la traccia dello stack per ulteriori informazioni sull'errore e sulla sua origine nel codice.

Dettagli eccezione: System.NullReferenceException: riferimento oggetto non impostato su un'istanza di un oggetto.

Cosa sto sbagliando? Come impedisco all'utente di vedere quei campi?

risposta

6

Trevor è corretta, è necessario impostare la vostra DataKeyNames come questo nel tuo markup DataGrid:

<asp:GridView ID="GridView1" runat="server" 
     DataKeyNames="PK_DailyTaskHours,PK_NonScrumStory" 

Una volta fatto questo si può ottenere i valori di nuovo come stringhe come questo:

 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
    { 
     string dailyTaskHoursPK = GridView1.DataKeys[0].Values["PK_DailyTaskHours"].ToString(); 
     string nonScrumStoryPK = GridView1.DataKeys[0].Values["PK_NonScrumStory"].ToString(); 
    } 
3

È inoltre necessario impostare la proprietà DataKeyNames del controllo con associazione a dati. L'impostazione visibile a false farà sì che i campi non vengano inviati al client a meno che il campo non sia specificato nella proprietà DataKeyNames. Vedi la pagina msdn su DataControlField.Visible Property.

+0

Potresti elaborare la proprietà DataKeyNames? Non sono sicuro di cosa tu voglia dire. –

5

Cerca di visualizzarli = "true", ma nasconderli con css.

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

... 
<asp:BoundField DataField="PK_DailyTaskHours" HeaderText="" SortExpression="PK_DailyTaskHours" ReadOnly="true" > 
    <ItemStyle CssClass="hidden-field"/> 
</asp:BoundField> 
<asp:BoundField DataField="PK_NonScrumStory" HeaderText="" SortExpression="PK_NonScrumStory" ReadOnly="true" > 
    <ItemStyle CssClass="hidden-field"/> 
</asp:BoundField> 
+1

Questo rimuove il testo dalle caselle ma le celle possono ancora essere viste. –

+0

Sì, sono d'accordo, il mio avrebbe funzionato, ma la soluzione era migliore. –

+0

Questo approccio ha funzionato per me: ho dovuto applicare la classe sia a ItemStyle che a HeaderStyle. (E ho bisogno di accedere ai valori sul lato client, non sul lato server.) – wloescher

1

Quando si vuole nascondere una colonna e anche ottenere il suo valore, si specifica DataKeyNames immobili per GridView nella pagina aspx.

<asp:GridView ID="GridView1" runat="server" DataKeyNames="PK_DailyTaskHours" ...> 

Quindi è possibile recuperare il valore di questa colonna come indicato di seguito nel codice.

string showId = (string) GridView1.DataKeys[6].Value.ToString(); 
1

sopra codice nascondi valore BoundField ma non nascondi headertext e manca la corrispondenza di tutte le colonne, quindi alcuni cambierò belove

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

...

<asp:BoundField DataField="PK_NonScrumStory" HeaderText="" SortExpression="PK_NonScrumStory" ReadOnly="true" ItemStyle-CssClass="hidden-field" HeaderStyle-CssClass="hidden-field" > 
</asp:BoundField> 

ora è il vero e proprio lavoro

+0

L'unica soluzione funzionante per me! Molte grazie! –

0

tenta di utilizzare logicamente utilizzando font-size

esempio

grid.Columns[0].HeaderStyle.Font.Size = grid.Columns[0].ItemStyle.Font.Size = 0; 
Problemi correlati