Selezione valori in gridview e passaggio a nuova pagina

sabato 09 maggio 2009 - 14.38

squilibrio Profilo | Expert

Ciao a tutti, ho un grid view con un checkbox

come posso passare ad una pagina i valori selezionati?

avevo pensato di salvare gli elementi selezionati in un variabile sessione.... ma quale soluzione mi consigliate di adottare per iterare gli elementi selezionati .... e come salvarli nella sessione?

ho trovato un esempio on line ma ho due dubbi:


1) Control come lo gestisco?? cosa devo includere tramite l'using?? (googlando non l'ho capito)

2) Come recupero l'ID del mio checkbox??


protected void btnProsegui_Click(object sender, EventArgs e)
{
//Elenco attività selezionate
IList<int> keys = new List<int>();

GridViewRowCollection rowCollection = gvElenco.Rows;
foreach (GridViewRow gridRow in rowCollection)
{
Control ctl = gridRow.FindControl("chkAttivita");
if (ctl is CheckBox)
{
CheckBox chk = (CheckBox)ctl;
if (chk.Checked)
{
int key = chk.; //Come recupero l'ID dell'attività selezionata??
keys.Add(key);
}
}
}


dove nell'HTML

<Columns>
<asp:TemplateField ShowHeader="False" ItemStyle-Width="10">
<ItemTemplate>
<asp:CheckBox ID="chkAttivita" runat="server" />
</ItemTemplate>
<ItemStyle Width="30px"></ItemStyle>
</asp:TemplateField>
<asp:BoundField DataField="DescrizioneAttivita" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left" HeaderText="Descrizione" SortExpression="DescrizioneAttivita" meta:resourcekey="BoundFieldResource2" />
</Columns>

Dampyr Profilo | Junior Member

Ciao, quello che devi fare è una bella rogna che mi sono ritrovato in parecchi casi.
Io non mi sono mai trovato con la GridView, ma credo non cambi nulla.
Fondamentalmente il problema è la mancanza di una proprietà nella check tipo "CommandName" (presente nel LinkButton ad esempio).
Io quando mi sono trovato in queste situazioni, per fare le cose velocemente ho sempre inserito nella prima colonna (magari settata invisibile) un controllo (ottima la Label o il Literal) al quale associo l'ID_attività, nel tuo caso, o il valore che voglio passare.
Quando cicli le righe, ti vai a rilevare il valore della checkBox, e nel caso sia positiva ti becchi l'ID dal controllo nascosto nella prima colonna.
(Che sia la prima colonna per comodità mia, ma puoi mettere il controllo dove più ti piace).

In alternativa ti puoi creare un control che eredita da CheckBox al quale aggiungi una proprietà del tipo CommandName, ma in questo caso per mantenere il valore ai postback o altri ammennicoli devi andarti a leggere come si creano i CustomControl (o UserControl).

La seconda strada la trovo la più pulita e riusabile anche in futuro, ma dipende dal tempo e dalla conoscenza nella creazione di controlli personalizzati.

Buon lavoro

[AGGIUNTA] cercando in Google ho trovato anche questa idea, un barbatrucco carino usando i CSS, da provare per vedere cosa succede
http://www.codeproject.com/KB/aspnet/CheckBoxCommand.aspx

... cerca di essere il giocatore di scacchi, non il pezzo sulla scacchiera...

mrub Profilo | Junior Member

Una soluzione semplice anche se poco elegante può essere

<ItemTemplate>
<asp:CheckBox ID="chkAttivita" runat="server" />
<asp: Label ID="IDattivita" text='<%# Bind("IDattivita") %>' visible="False"/>
</ItemTemplate>


protected void btnProsegui_Click(object sender, EventArgs e)
{
//Elenco attività selezionate
IList<int> keys = new List<int>();

GridViewRowCollection rowCollection = gvElenco.Rows;
foreach (GridViewRow gridRow in rowCollection)
{
Control ctl = gridRow.FindControl("chkAttivita");
if (ctl is CheckBox)
{
CheckBox chk = (CheckBox)ctl;
if (chk.Checked)
{
int key = gridRow.FindControl("IDattivita").Text;
keys.Add(key);
}
}
}

squilibrio Profilo | Expert

grazie mille a tutti!!!


provo subito!!!

Dampyr Profilo | Junior Member

>grazie mille a tutti!!!
>
>
>provo subito!!!

Ciao, hai provato?!?!? Sarebbe cosa buona e giusta accettare le risposte se hai risolto o dare un feedback se non ti sono servite e hai risolto in altro modo.

Ciao


... cerca di essere il giocatore di scacchi, non il pezzo sulla scacchiera...
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5