Parametro di una colonna non visibile su gridview

giovedì 14 dicembre 2006 - 17.40

amstrad Profilo | Junior Member

'Sera a tutti,
Volevo domandare se a qualcuno è capitato di dover utilizzare una colonna nascosta per prendere un parametro da un database senza visualizzarlo ma richiamandolo quando si clicca sulla voce di un'altra colonna,
in prativa ho una grid view con questa impostazione

NOME COGNOME CODICE FISCALE ID

il campo id è l'unico a non essere visibile, quando clicco su uno dei nomi nella gW io mi passo l'idfacendo un semplice id.text per fare una select evisualizzare un dettaglio, questo però funziona solo se il campo Id è visualizzato, quando lo nascondo il valore chemi passa è sempre ""

sapete se è un problema di del member text che non funziona per i campi invisibili, oppure altro?

tnx

freeteo Profilo | Guru

ciao,
non so se ho capito esattamente il tuo intento, ma mi sembra che l'id ti serva recuperarlo quando l'utente seleziona una riga, quindi hai un bottone che ti fa la selezione (S.Questo lo puoi tranquillamente fare specificando la proprieta' id che sia "chiave" dei record visualizzati, ovvero appunto specificando la proprieta'
DataKeys nella tua grid, in questo modo:

<asp:GridView ID="GridView1" runat="server" DataKeyNames="ID"

e poi nella selezione la riprendi in questo modo:

void GridView1_SelectedIndexChanged(object sender, EventArgs e) { ... = GridView1.SelectedDataKey.Value... .....

se invece vai per cella allora potresti avere problemi dato che se non è visibile non la trovi...
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

totti240282 Profilo | Guru

e se ci sono più datakeysname ??? con quel metodo si puo accedere alla collezione dei valori datakeysname ???
C'è solo un capitano !!!!!!

amstrad Profilo | Junior Member

forse misono spiegato maleperche non riesco ad applicare la soluzione suggerita...
allora
mettiamo caso che ho 3 colonne sul mio GW

NOME ID CODICE FISCALE

nome è un link, id è un camponascosto e codice fiscale è un normale campo non modificabile.
cliccando sul link di nome mi servirebbe fare una query per la pagina di dettaglio simile a select * from utenti where id=(l'id che è nel campo nascosto).
ma da quanto ho capito questo non è fattibile, però non riesco neanche ad utilizzare lasoluzione che mi avete proposto, maggiori consigli?

freeteo Profilo | Guru

ti posto il codice da fare copia incolla in una nuova pagina (senza file di codice separato):
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
come vedi non importa se la colonna è stata nascosta, o come da esempio non c'è proprio, la griglia con i "selectdatakeys" ti gestisce proprio nativo questa funzionalita'...sinceramente mi sembra la soluzione migliore...
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

amstrad Profilo | Junior Member

provato, ma niente da fare... quando cerco di prendere il valore da SelectedDataKey[0] ottengo un'eccezione di tipo null reference.

potrebbe dipendere dal fatto che nel codice che mi avete postato il Dt viene costruito amano mentre io per non rinunciare alla paginazione ho dovuto utilizzare la prcedura guidata di visual studio e quindi il dt non lo gestisco direttamente ma gli passo solamente una query,(nb: in questa query è cmq presente il campo che cerco di riprendere con il metodo selectedDatakey)?

freeteo Profilo | Guru

non centra, l'importante è che il datasource della griglia sia riempito da una serie di righe,oggetti tipizzati o datarow non ha importanza, l'importante è che tu veda un datasource riempito, e questo lo puoi controllare debuggando nella finestra di "controllo immegiado" (watch).

Cmq sia se hai messo nella dichiarazione della griglia il campo che ti fa da id, quando vai a prendere il selectDataKey devi trovarlo...ci deve essere un problema da qualche altra parte...propva a postare quest'ultimo codice cosi' vedo dove sta' l'errore.
Grazie
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

@ndrea Profilo | Newbie

prova a fare cosi:

gridCustomers.SelectedRow.Cells("indice della colonna"), che da quanto ho capito dovrebbe essere la prima, quindi
gridCustomers.SelectedRow.Cells(0)...

Ciao
@ndrea


write once, run everywhere

amstrad Profilo | Junior Member

nuovo giorno nuovi tentativi...

allora stamane ho riprovato, ho notato che il .DataKeys del mio Gw viene valorizzato, all'interno di esso trovo il count corretto delle righe visualizzate ma se cerco il .SelectedDataKey questo è uguale a null, purtroppo ho dei problemi a postare il codice, altrimenti lo avrei già fatto pardon

freeteo Profilo | Guru

ok, se viene valorizzato allora il problema sta probabilmente nel fatto che la riga non viene selezionata

hai messo una colonna che faccia effettivamente il comando di selezione? intendo questo codice:
<asp:CommandField ShowSelectButton="true" />

altrimenti non viene scatenato l'evento selectindexchanged e quindi non hai la riga selezionato...oppure se la selezioni da codice ma allora sai gia' anche l'id probilmente
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

amstrad Profilo | Junior Member

effettivamente non utilizzo il <asp:CommandField ShowSelectButton="true" /> perchè il primo campo è già un link che mi rindirizza ad un'altra pagina il problema è che devo prendere l'informazione ID dal dt che riempie il Gridview prima di essere reindirizzato altrimenti non so come far costruire la select che mi darà i dati per la pagina successiva, ed essendo la colonna id non visibile, non esistendo il comando select, non posso ne prenderlo facendo id.text, ne con il metodo che mi avete suggerito

freeteo Profilo | Guru

ciao,
forse ho capito, tu vuoi fare qualcosa di diverso da quello che ci siamo detti, ovvero ti serve costruire un hyperlink che ti punti ad una pag e passi una variabile tramite QueryString.
Per fare cio' ti basta generare il tag html corretto, e quindi man mano che la griglia genera il campo della colonna, ti faccia il link corretto.
in poche parole a te servira' una colonna di questo tipo:
<asp:HyperLinkField DataNavigateUrlFields="id" DataNavigateUrlFormatString="/pagine/default.aspx?id={0}" DataTextField="id" />

questa colonna genera gia' lei un link che punta alla tua pagina e gli passa tramite url il parametro...ovviametne adattalo alla tua esigenza, ma credo sia questo che cercavi...
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

amstrad Profilo | Junior Member

mmm... credo che ancora non ci siamo, provo a postare un'esempio concreto...

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName.Equals("Dettaglio")) { int index = Convert.ToInt32(e.CommandArgument); GridViewRow selectedRow = grvElenco.Rows[index]; TableCell id = selectedRow.Cells[1]; Session["IdLog"] = id.Text; Response.Redirect("DettaglioLog.aspx"); } } protected void SqlDataLog_Init(object sender, EventArgs e) { SqlDataLog.SelectCommand = "QUERY PER VALORIZZARE IL GW"; }

mettiamo il caso che il gw sia sempre il solito
"NOME" "COGNOME" "IDLOG"
nome è di tipo buttonfield e cpme command name ha dettaglio, gli altri sono campi normali.
con il codice che ho postato non ho problemi finche il campo idLog è visibile, ma quando il campo viene nascosto non posso piu passare l'id in sessione con id.text, quindi quello che mi occorre è un modo per poter passare in sessione l'id quando la colonna che lo contiene è nascosta.

Spero di essere stato chiaro, grazie ancora per le risposte date fin qui

@ndrea Profilo | Newbie

in un mio vecchio progetto facevo una cosa del genere, ma la if èra leggermente diversa
erà pressochè cosi:



if (e.CommandName == "Dettaglio")

int index = e.CommandArgument.ToString();
//qui prevedevo un metodo per la conversione del cmdArgument non saprei nel tuo caso
gridCustomers.SelectedIndex = index;
TableCell id = selectedRow.Cells[1];
Session["IdLog"] = id.Text;
Response.Redirect("DettaglioLog.aspx");
}


vedi se può esserti utile!
@ndrea


write once, run everywhere
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5