Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,560

    Aggiungere event handler ad un controllo dinamico

    Salve a tutti,
    Più che un problema, ho bisogno di un chiarimento. Devo creare N tabelle (GridView) in base ad una query sul db:

    codice:
    private void someControl_Click(....)
    {
       DataSet ds = ...query sul db;
       var groups = ds.Table[0].asEnumerable().Group(f => f.Field<int>("fkTable"));
    
      foreach(var group in groups)
       {
         GridView tmp = new GridView();
         tmp.DataSource = group;
         tmp.DataBind();
         tmp.SelectedIndexChanged += dataGridFunctionHandler;
        // Aggiungo i campi e il CommandField Select
         pagePanel.Controls.Add(tmp);
       }
    }

    Allora... le tabelle ci sono, i dati ci sono ma non funziona la selezione della riga. O meglio non viene chiamata la "dataGridFunctionHandler". A questo punto ho pensato che dopo il postback si "perde" l'aggiunta del handler. Quindi i sostituito tutto questo con un repeater:
    codice:
    <asp:Repeater ID="..."  ... >
    <ItemTemplate>
       <asp:GridView onSelectedItemChanged="dataGridFunctionHandler" ...>
           ....
      </asp:GridView>
    </ItemTemplate>
    </asp:Repeater>

    e nella someControl_Click ho assegnato il DataSource al repeater.

    Così viene richiamata la dataGridFunctionHandler...ma mi sfugge il motivo per cui con il primo metodo non funziona mentre con questo si
    Ultima modifica di djciko; 03-08-2020 a 12:58

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,778
    prima di tutto, hai notato che hai assegnato il dataGridFunctionHandler a due eventi diversi ?


    programmaticamente è <SelectedIndexChanged> ma nell'aspx è <onSelectedItemChanged>


    cosi', come prima nota

    poi c'e' da analizzare la sintassi del delegato

  3. #3
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,778
    credo che la sintassi sia:

    codice:
    tmp.SelectedIndexChanged += new EventHandler(dataGridFunctionHandler);

  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,560
    Grazie per la risposta. Sono due cose che avevo già controllato:

    1. "Lato" c# non c'è l'evento OnSelectIndexChanged, ma solo SelectIndexChanged
    2. Avevo provato anche così, con la new EventHandler, ma non cambia nulla

    L'unica casa che mi viene in mente è che con il repeater, forse, vengono ricreate le gridview (e attaccato l'evento) prima che venga gestito l'evento (il repeater è nel asp)...ma non sono molto esperto di asp .net

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,778
    Quote Originariamente inviata da boots Visualizza il messaggio
    Grazie per la risposta. Sono due cose che avevo già controllato:

    1. "Lato" c# non c'è l'evento OnSelectIndexChanged, ma solo SelectIndexChanged
    2. Avevo provato anche così, con la new EventHandler, ma non cambia nulla

    L'unica cosa che mi viene in mente è che con il repeater, forse, vengono ricreate le gridview (e attaccato l'evento) prima che venga gestito l'evento (il repeater è nel asp)...ma non sono molto esperto di asp .net

    cioe' la grid è in un repeater ?

  6. #6
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,560
    Adesso si...come detto nel primo post:
    1 Nel handler di un bottone ho fatto un ciclo ed aggiunto ad un panel N GridView alle quali ho aggiungo l'handler per gestire la selectedIndexchanged. Ma così non mi viene chiamata la funzione handler nel postback

    2Ho cambiato il codice mettendo un repeater nel quale creo le N GridView e l'handler lo specifico nel aspx. Così funziona

    Mi chiedevo perchè nel primo caso questo handler si "perde" dopo il postback

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,778
    1. "Lato" c# non c'è l'evento OnSelectIndexChanged, ma solo SelectIndexChanged


    questo è ovvio, ma io intendevo porre l'attenzione che nelle due prove che hai fatto hai usato due handler diversi, SelectedIndex con la prova in C# e SelectedItem con quella in ASPX.

    In piu', nel codice che non funziona l'aggiunta dell'handler ha una sintassi errata credo..
    (questo: tmp.SelectedIndexChanged += dataGridFunctionHandler)

  8. #8
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,560
    Ops...scusami, ma ho sbagliato a scrivere nel post

    Intendevo: onSeletedIndexChanged nel aspx e SelectedIndexChanged da codice.

    Per l'aggiunta del handler ho provato in due modi
    tmp.SelectedIndexChanged += dataGridFunctionHandler
    tmp.SelectedIndexChanged += new EventHandler(dataGridFunctionHandler)

    Non cambia nulla

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 © 2020 vBulletin Solutions, Inc. All rights reserved.