Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    7

    Gestione di uno UserControl caricato dinamicamente con LoadControl

    Buongiorno a tutti,
    sto affrontando per la prima questo tipo di problematica, abbiate pazienza

    Devo gestire attraverso una pagina ASPX che fa da "ponte" la gestione di due ASCX che essa include.
    La pagina aspx ha una masterpage, ma questo non dovrebbe essere di interesse.

    Ora il primo ASCX (ASCX1) lo carico col solito
    <%@ Register TagPrefix="UC" TagName="CatTree" Src="~/blablabla.ascx" %>
    è un controllo che semplificando possiamo dire che è un tree. Il controllo ha degli eventi, quello significativo quando clicco un nodo del tree "porto su" un evento che leggo dalla pagina contenitore (ASPX)


    il secondo controllo, e qui arriva quello che mi da problemi, deve essere caricato runtime perché quale ASCX carico, fra i tanti che ho, dipende dal valore del nodo cliccato.
    quindi sul gestore dell'evento Node_Click del ASCX1
    Uso il LoadControl

    Quindi lo carico così:
    codice:
    select case blabla
       Case X
         path = "/blablabla.ascx"
         UControl = CType(LoadControl(path), ASP.Arrangements) 'ASP.Arrangements è il mio tipo
    End Select
    .....
    'aggiungo al mio segnaposto il controllo caricato dinamicamente
    PlaceHolder_UC.Controls.Add(UControl)
    .....
    Eccoci ai problemi:
    1) dove ho il placeHolder non carica nulla, cioè se metto dei log sul controllo ASCX2 caricato dinamicamente vedo che ci passa e fa tutto quello che deve fare, però a video niente

    Ora io il loadcontrol lo chiamo sul gestore dell'evento ASCX1_NodeClick perché da li poi so cosa caricare
    (1a) se faccio il LoadControl (con valori arbitrari) dal ASPX Page_Load lo vedo a video! non è quello che mi serve ma tanto per capire...

    2) nel caso 1a o comunque riuscendo a far spuntare ASCX2 in qualche altra maniera, quando faccio qualche operazione all'interno del ASCX2 (clicco un pulsante, clicco una riga della griglia etc.) ho un postback sulla ASPX che, chiaramente, non voglio perché torno alla situazione di partenza in cui avendo da caricare ASCX2 dinamicamente esso mi viene azzerato

    Non so che pesci pigliare, come la risolvo, grazie
    M



    edit: questo è un esempio che ho visto:

    link esempio
    ora, se su Client.ascx aggiungo un paio di controlli

    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    <asp:Button ID="Button1" runat="server" Text="Button" Width="201px" />

    e code behind alla pressione del button scrivo qualcosa su label1 succede che hi un postback e "perdo" lo UserControl esattamente il mio punto 2

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    7
    ho quasi risolto partendo da questo esempio e rifacendo tutto da capo qui

    comunque sembra che il mio problema fosse derivato dall'uso di Ajax dentro l'ASCX1; mica capito bene il perché...

  3. #3
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Ma l'evento ASCX1_NodeClick veniva sollevato ?
    Entrava nel case per decidere quale secondo UC caricare ?

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    7
    assolutamente si!
    avevo messo tutta una serie di log in ogni funzione del secondo ascx, da quelli vedevo che chiamava ogni routine che doveva chiamare ma a video niente.

    ora invece è ok anche se ho ancora un problema che sto cercando di capire,
    sul secondo ASCX (quello caricato dinamicamente in funzione dell'evento del primo) tutti i controlli label e textbox etc. non mi danno problemi, invece ho una griglia alla quale passo il datasource (con un dataset) chiamo il Rebind, dai log vedo che mi chiama il needdatasource della griglia ma la griglia resta senza record...
    boh.. ora sto cercando di capire perché

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    ma per "log" intendi i breakpoint di debug ?

    Controlla se il Dataset e' pieno..

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    7
    log intendo che mi scrivo un file (testo) di log
    il dataset ha 1 record

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    alle volte gli UpdatePanel, specialmente in versione 2.0, fanno un po' di capricci.
    la butto cosi' a caso eh

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    7
    ho risolto ma non ho capito il funzionamento di questa cosa
    se qualcuno, soprattutto tu djciko che ti ringrazio perché ti stai interessando, me lo sa spiegare io sono contento


    questo è il container ASPX
    codice:
    <td style=" width:18%; vertical-align:top">
    <UC:CatTree ID="CatTree1" runat="server" />
    </td>
    <td style=" width:80%;vertical-align:top"> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>                                                 
    <asp:PlaceHolder ID="PlaceHolder_UC" runat="server"></asp:PlaceHolder>
    </ContentTemplate>
    <Triggers>                                                 
    <asp:AsyncPostBackTrigger ControlID="CatTree1" />
    </Triggers> 
    </asp:UpdatePanel>                                                                             
    </td>
    CatTree e ASCX1 caricato col register
    mentre nel PlaceHolder carico dinamicamente il controllo ASCX2


    ASCX2 (porzione in cui ho una griglia telerik, ma non dovrebbe cambiare anche se non fosse telerik)





    codice:
     
    <telerik:RadGrid    ID="RadGridArrangement" runat="server" GridLines="Vertical"  AllowPaging="true" Skin="Simple" AllowFilteringByColumn="False" AutoGenerateColumns="False" PageSize="10" Width="950px" OnItemCommand="RadGridArrangement_ItemCommand">
    
    <ItemStyle Wrap="False" />
    <AlternatingItemStyle Wrap="False" /> 
    
    <MasterTableView GridLines="Vertical" AllowPaging="true" AllowFilteringByColumn="False" ClientDataKeyNames="IDArrangement" DataKeyNames="IDArrangement" TableLayout="Fixed">
    
    <Columns>                             
    <telerik:GridClientSelectColumn HeaderStyle-Width="40px" UniqueName="CheckboxSelectColumn" FooterText="CheckBoxSelectfooter">
    <HeaderStyle Width="40px" />                             
    
    </telerik:GridClientSelectColumn>
    <telerik:GridBoundColumn DataField="IDArrangement" HeaderText="IDArrangement"><HeaderStyle Width="45px" />                             
    </telerik:GridBoundColumn>
    <telerik:GridBoundColumn DataField="Description" HeaderText="Descrizione">                                                                             <HeaderStyle Width="245px" /> 
    </telerik:GridBoundColumn>  
    </Columns>       
                                                                                              </MasterTableView>                  
    
    </telerik:RadGrid>
    e così non funzionava, non passava mai per il
    Protected Sub RadGridArrangement_ItemCommand(ByVal sender ...

    ho aggiunto questo dopo la mastertableview
    codice:
    <ClientSettings enablePostBackOnRowClick="true">
    <ClientEvents  />
    <Selecting AllowRowSelect="True" />
    </ClientSettings>
    e adesso non solo carica si vede il record sulla griglia ma mi passa anche per RadGridArrangement_ItemCommand
    e da li in poi riesco a gestire tutto: button esterni che mi eliminano il record selezionato, aggiunta di record, modifica... tutto


    non mi è assolutamente chiaro perché aggiungendo i clientsetting ho raggiunto questi due risultati

    1) a video spunta il record che prima non c'era (seppur il datasource anche prima era correttamente inizializzato)

    2) tutte le operazioni legate alla griglia funzionano (si beh certo magari sarebbero andate anche prima avendo un record a video da cliccare...)

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.