Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887

    C# - Evento di uno UC da gestire dalla pagina ospitante

    In VB ci riuscivo, ma lo scenario era leggermente diverso. Devo spegnere un DIV di uno UC da un evento di un altro UC. In pratica:

    Una pagina, che chiameremo Pagina.aspx.

    User Control -A- con una DropDown che all'indexChanged deve fare il Raise di un evento da far intercettare in Pagina.aspx, e far intervenire la stessa su un altro UserControl (B) caricato programmaticamente.

    Ho dichiarato un evento, l'ho sollevato all'indexChanged ma l'evento è null.

    Sembra molto piu' complesso che in VB. Qui ad esempio:
    http://msdn.microsoft.com/en-us/library/8627sbea.aspx



    Qualcuno sa come fare ?

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Ola Ciko,
    mi mostri il codice che hai fatto? così si lavora direttamente li...
    In pratica devi aggiungere un evento, ma potresti usare anche un action senza stressarti con (seppur più eleganti) delegate & event.

    Metti una proprietà public Action<TipoRestituito>, dopo aggiungi un handler al tuo evento, e nel metodo che viene chiamato chiami la action. Nel controllo 2 devi solo rendere public quello che vuoi modificare, immaginiamo il text di una label. mentre nella pagina che ospita i 2 controlli, imposti la Action sulla proprietà della label del controllo 2.

    in pratica questo :


    codice:
    //WebUserControl1, possiede una listBox che genera l'evento
    public partial class WebUserControl1 : System.Web.UI.UserControl
        {
            public Action<string> Action { get; set; }
    
    
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    this.ListBox1.DataSource = Enumerable.Range(0, 10).Select(s => s.ToString());
                    this.ListBox1.DataBind();
                }
            }
    
    
            protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
            {           
                if (this.Action != null&&this.ListBox1.SelectedItem!=null)
                    this.Action(this.ListBox1.SelectedItem.Text);
            }        
        }
    
    //WebUserControl2, possiede una label che verrà cambiata dal controllo 1
    public partial class WebUserControl2 : System.Web.UI.UserControl
        {
            public string LabelText { get { return this.Label1.Text; } set { this.Label1.Text = value; } }
    
    
            protected void Page_Load(object sender, EventArgs e)
            {
    
    
            }
        }
    //la pagina che contiene i WebUserControls
    public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                //imposto la action del controllo 1 in modo che quando scatta imposta la label del controllo 2 con il testo selezionato nel controllo 1
                this.WebUserControl11.Action = new Action<string>((item) => this.WebUserControl21.LabelText = item);
            }
        }
    EDIT :
    Il fatto che il controllo sia caricato dinamicamente non fa differenza, ma una cosa che hai detto mi ha un po colpito, ovvero : "l'ho sollevato all'indexChanged ma l'evento è null", cosa intendi? non è che intendi che non scatta, o che il selectedItem è null, o roba di questo tipo?
    Ultima modifica di U235; 14-01-2014 a 23:50

  3. #3
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    ti scrivo il codice in giornata.

    era un
    codice:
    public event EventHandler .....
    ed all'indexChanged, sollevandolo, era Null. Sbagliavo qualcosa .. o tutto

  4. #4
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    è null quando nessuno si è iscritto all'evento dopo aver caricato dinamicamente il controllo.

    in pagina.aspx, dopo aver creato il controllom dovresti avere qualcosa tipo:

    ctrlA.SampleEvent += (s,e) => { ctrlB.MostraDiv(); }

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Ragazzi, grazie per le risposte.
    La verita' e' che ora non ho piu' tempo di vederlo e ci tornero' su quando avro' un attimo di respiro.

    Faccio risalire il thread quando mi ci rimetto. Intanto ho risolto in un altro modo. Thanks.

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