Pssare Variabili tramite bottoni creati dinamicamente

venerdì 24 agosto 2007 - 08.47

Kesty Profilo | Newbie

Inizio nel dire che mi sono avvicinato a Asp.Net e a C# da pochissimo, e quindi chiedo scusa se faccio domande che possono sembrare semplici e banali.

Ma per questo ho cercato parecchio in giro e non trovo niente che mi possa aiutare.



Ho una funzione che prende dei dati e li trasforma in una DataTable che poi mostra inserendoli in una GridView.

codice:

grwResults.DataSource = GetData(query, LastNum); grwResults.DataBind();



Questi dati sono ovviamente dinamici, presi da un database e cambiano in base a dei dati che inserisce l'utente in un'altro campo.

In questa GridView deve venire creato dinamicamente un bottone/link (io ho provato con LinkButton) che OnClick chiama una funzione (in questo esempio: btnSearch).

Il mio problema è che questa funzione richiede dei parametri. Due glieli passo tramite viewstate e non è un problema perchè nonostante siano anch'essi dinamici sono uguali per tutti i bottono creati.
Ma uno dipende dal bottone che crea. Praticamente ogni bottone del gridview dovrebbe passare un dato diverso.

Quindi la funzione GetData prende dei dati dal database in base ad una ricerca, li mette in una DataTable che viene mostrata tramite GridView.
Quest GridView avrà varie righe, a dipendenza del risultato, e in ogni riga ci deve essere un bottone che richiama una funzione passandogli il nome del logo.

codice:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Come posso far si che la funzione btnSearch sappia da chi è stata chiamata e possa prendere il dato che serve ?

Codice btnSearch

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Wamba Profilo | Expert

Potresti pensare di usare Button.CommandArgument. A che serve? Nulla! Spazio libero dove stoccare informazioni per i programmatori bisognosi insieme alla proprietà CommandName risolvono un bel pò di problemini come il tuo.
http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.button.commandargument.aspx
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba

Kesty Profilo | Newbie

Perfetto potrebbe essere interessante.

L'unico problema che mi rimane è un'altro.


Non posso inserire la variabile in questo modo:

<asp:Button id="Button5" Text="(<%# Eval("number", "{0}") %>)" CommandName="Submit" CommandArgument="<%# Eval("name", "{0}") %>" OnCommand="btnSearch_ServerClick" runat="server" />

Quindi come faccio a dargli gli argomenti visto che la tabella viene creata dalla gridview ?
Io non so, prima di interrogare il database quanti saranno i bottoni, quale sarà il testo dei bottoni o quale sarà il nome che dovrò passare alla mia funzione.

Grazie mille dell'aiuto, come ho detto è una settimana che ho iniziato a guardare CSharp e .Net quindi ho bisogno di spiegazioni un po' più dettagliate.

Wamba Profilo | Expert

Perchè non puoi inserirla così? Che errore ti da?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba

Kesty Profilo | Newbie

Mi dice: "Il formato del Tag Server non è corretto"

All'inizio avevo provato a fare così:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Creando la funzione con 1 argomento, ma per lo stesso motivo non me l'accettava

Wamba Profilo | Expert

Così su due piedi non saprei che dirti... non conosco abbastanza bene il databinding, ma sembra un problema sintattico. il parametro {0} che cosa significa?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba

Kesty Profilo | Newbie

Dato che era da ieri che ne discutevo su un'altro Forum finalmente ho trovato la risposta:


Per risolvere ho creato il link in questo modo

<asp:LinkButton ID="SearchJournal_2" runat="server" CommandArgument='<%# Eval("name", "{0}") %>'>(<%# Eval("number", "{0}") %>)</asp:LinkButton>

Ho aggiunto al GridView: onrowcommand="btnSearch" [/

la funzione invece viene modificata così:

protected void btnSearch(object sender, GridViewCommandEventArgs e)
{
string selectedLogo = e.CommandArgument.ToString();

-- resto della funzione ....

Questo il link (in inglese) per la spiegazione: http://www.west-wind.com/WebLog/posts/88462.aspx

Grazie mille comunque dell'aiuto, mi sa che la soluzione era simile alla tua ma dovevo mettere i comandi tra '' e non tra "" ...
Con il linkbutton però mi viene più comodo che col bottone.



Wamba Profilo | Expert

Perfetto, sono contento che tu abbia risolto .
Ricordati di chiudere il thread.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
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