Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    12

    [2.0-C#]Passare Variabili tramite bottoni creati dinamicamente

    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:
        
    <asp:GridView ID="grwResults" runat="server" 
                      AutoGenerateColumns="False" style="width: 100%; height: 100%" 
                      AllowPaging="false" CellPadding="5">
                     <RowStyle BackColor="White" />
                     <HeaderStyle BackColor="#92B7CA" />
                     <AlternatingRowStyle BackColor="#92B7CA" />
                     <Columns>
                        <asp:TemplateField HeaderText="Logo" ItemStyle-HorizontalAlign="Left">
                          <ItemTemplate>
                             <asp:LinkButton ID="Search_1" runat="server" OnClick="btnSearch">
                                 <img width="80" height="25" alt="<%# Eval("name", "{0}") %>" src="<%# Eval("logo", "{0}") %>" />
                              </asp:LinkButton>
                          </ItemTemplate>
                        </asp:TemplateField>
                         <asp:TemplateField HeaderText="Numeri" ItemStyle-HorizontalAlign="Left">
                          <ItemTemplate>
                            <asp:LinkButton ID="Search_2" runat="server" OnClick="btnSearch">
                                 (<%# Eval("number", "{0}") %>)
                            </asp:LinkButton>
                           </ItemTemplate>
                        </asp:TemplateField>      
                     </Columns>
                     
                      <EmptyDataTemplate><div id="divEmptyResults" style="display: none">Your search - 
                        <asp:Label ID="lblEmptyResults" runat="server" Font-Bold="True" /> - did not match any documents.
                         </EmptyDataTemplate>
                  
                  </asp:GridView>
    Come posso far si che la funzione btnSearch sappia da chi è stata chiamata e possa prendere il dato che serve ?

  2. #2
    ma il metodo btnSearch non riceve in input un oggetto di tipo EventArgs?

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    12
    Si, come ho deto ho iniziato a provare a lavorare su C# e ASP.Net da neanche una settimana quindi è moolto probabile che le risposte alle mie domande siano molto più semplici di come io cerchi di farle passare.


    semplifico il codice del btnSearch
    codice:
      protected void btnSearch( object sender, EventArgs e)
          {
               //Questa è la Variabile che dovrebbe essere modificata a dipendenza del bottone che clicco. 
              string selectedLogo = "cdt";
              //Adesso è statica perchè dato che non riuscivo a passargli il valore dinamicamente volevo almeno vedere se il resto della funzione andava.
              
              string searchText = ViewState["SearchQuery"].ToString(); 
              string LastNum = ViewState["LasNum"].ToString(); 
    
    
    ..... ALTRO CODICE .....
    
    
            grwResultsLogo.DataSource = GetDataLogo(query, Convert.ToInt32(LastNum), selectedLogo);
            grwResultsLogo.DataBind();
    
       } //END btnSearch
    Posso tirare fuori i dati da EventArgs ? E come glieli imposto nella pagina aspx ?

    Grazie della pazienza

  4. #4
    Non l'ho mai fatto, ma credo che nell'oggetto e di tipo EventArgs tu debba avere
    il record corrispondente alla riga del GridView della quale hai premuto il bottone.
    Da li puoi prenderti i valori che ti interessano

  5. #5
    mm in eventArgs effettivamente la riga non c'è...
    MI sa che devi agire in modo differente da come stai facendo ora per fare quello che ti serve

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    12
    Eheh...

    Bene e questo mi riporta punto e a capo...
    Qualche altra idea su che direzione prendere, almeno posso provare a cercare in giro con un'obbiettivo più specifico. Perchè cercando il problema genericamente non riesco a trovare nietne.


    Se penso che a fare la stessa cosa in ASP o PHP non mi sarei posto nessun problema

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    12
    Nessuna idea ? Stò ancora brancolando nel buoio e tra un po' mi metto a dare fuoco ai vari manuali .Net che ho sul tavolo.

  8. #8
    Ho trovato Questo link prova a vedere se ti può dare uno spunto su cosa fare, e facci sapere se risolvi!

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    12
    Perfetto, funziona

    Per risolvere ho creato il link in questo modo

    codice:
     <asp:LinkButton ID="SearchJournal_2" runat="server" CommandArgument='<%# Eval("name", "{0}") %>'>(<%# Eval("number", "{0}") %>)</asp:LinkButton>
    Ho aggiunto al GridView:
    codice:
     onrowcommand="btnSearch"
    la funzione invece viene modificata così:

    codice:
     protected void btnSearch(object sender, GridViewCommandEventArgs e)
          {
    
              string selectedLogo = e.CommandArgument.ToString();
    
    -- resto della funzione ....
    grazie mille !

  10. #10
    Bene!


    PS certo che ci hai messo solo 20 minuti per risolvere tutto ^^
    Bastava una piccola ricerca su google eheheeh

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.