Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    285

    dropdownlist non trovato in repeater

    Ho inserito una dropdownlist in un FooterTemplate di un repeater ma quando la richiamo da codice, nel form load mi dice name "nomedelladropdownlist" is not declared..

    Non vede il controllo, ovviamente se esco la dropdownlist fuori dal repeater funziona..

    Come faccio a fargliela "vedere" da codice?


    Grazie

  2. #2
    Utente di HTML.it L'avatar di evil80
    Registrato dal
    May 2001
    Messaggi
    321
    Devi accederci tramite il modello ad oggetti del repetear, tipicamente tramite un FindControl e poi castandola alla classe ComboBox.

    ciao.
    Secondo alcuni autorevoli testi di tecnica di aeronautica, il calabrone non può volare, a causa della forma e del peso del proprio corpo in rapporto alla superficie alare.
    Ma il calabrone non lo sa e perciò continua a volare.
    Igor Sikorsky

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    285
    Grazie per la risposta evil80! avevo già tentato col findcontrol ma ho sempre ricevuto errore e non ho mai saputo se fosse la giusta via visto che non l'avevo ancora mai utilizzato..
    Guardando alcuni esempi su internet, ho inserito questa riga nel form load ;

    codice:
    Dim a As DropDownList = DirectCast(mio_datareader.FindControl("id_del_dropdownlist"), DropDownList)
    e fin qui tutto ok.. nessun errore

    ma appena tento di interagirvi..

    codice:
    a.Items.Clear()
    ottengo..

    Riferimento a un oggetto non impostato su un'istanza di oggetto. perchè ovviamente ho omesso il "NEW", sembrerà strano ma non riesco ad inserirlo nella riga precedente che ottengo sempre errore.... lo so sono una schiappa!
    mi dareste un ultima mano?

    Grazie ancora

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Non ottieni errori perche' 'a' e' Nothing, e non viene sollevata eccezione fin quando non tenti di accedervi....

    E poi...sei sicuro che il repeater abbia finito di renderizzare il tutto, quando tenti di recuperare il controllo ?

    ps: mi sembra che findcontrol non riesca a 'raggiungere' la drop se e' a sua volta contenuta in qualche altro controllo lato server utilizzato nei template del repeater.

    posta il codice di quest' ultimo ...

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    285
    Grazie per l'intervento

    1) appunto, non è inizializzato..

    2) Non sono sicuro..


    ecco il codice del repeater;

    codice:
    <asp:repeater ID="griglia_annunci" runat="server">
    
    <HeaderTemplate>	    
    ...
    </HeaderTemplate> 
    
     <SeparatorTemplate>
    ...
     </SeparatorTemplate>
    
    <FooterTemplate>
    <table width="100%" border="0" cellpadding="0" cellspacing="0">
    <tr>
    <td width="100%" height="8" colspan="3" bgcolor="#FFFFFF" class="testo_medio_nero">
    <div align="left"></div>
    </td>
    </tr>
    <tr>
    <td width="25%" height="20" bgcolor="#F4F4F4" class="testo_medio_nero">
    <div align="left">
    
    
    Pagina 1 di 1</p></div></td>
    <td width="50%" bgcolor="#F4F4F4" class="testo_medio_nero"><div align="center">&lt;&lt; Precedente - Successivo &gt;&gt;
    </div>
    </td>
     <td width="25%" bgcolor="#F4F4F4" class="testo_medio_nero">vai a 
     
     <asp:DropDownList ID="pagina" runat="server" AutoPostBack="True" CssClass="testo_medio_nero"></asp:DropDownList>
    </td>
    </tr>
    </table> 
     </FooterTemplate>       
    </asp:repeater>

    e il codice nel form load, cerco solo di caricare la drop con i valori recuperati dal database;

    codice:
    Dim a As DropDownList = DirectCast(griglia_annunci.FindControl("pagina"), DropDownList)
           
           a.Items.Clear()
    
            Dim I
            a.Items.Insert(0, New ListItem("seleziona.." & I, 0))
    
            For I = 1 To PagineTotali
                a.Items.Insert(I, New ListItem("Pagina " & I, I))
            Next

    Grazie per la pazienza

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Non nel page_load, ma nell'itemdatabound :

    codice:
        Private Sub griglia_annunci_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles griglia_annunci.ItemDataBound
            If e.Item.ItemType = ListItemType.Footer Then
                Dim dd As New DropDownList
                dd = DirectCast(e.Item.FindControl("pagina"), DropDownList)
                
                dd.DataTextField = "campotext"
                dd.DataTextField = "campovalue"
                dd.DataSource = tuo_dataset (quello usato per bindare l'intero repeater)
                dd.DataBind()
            End If
        End Sub

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    285
    Perfetto! adesso funziona correttamente.. purtroppo ho sempre smanettato con il vecchio asp e mi devo ancora abituare a tutti questi "incapsulamenti" di oggetti e sub annidate... di asp.net

    Grazie mille, spero a buon rendere


  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    figurati, studiati un po' la sequenza degli eventi che riguardano i controlli e la classe page...poi risultera' tutto piu' semplice e chiaro..

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.