Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881

    findcontrol e caratteri jolly

    Si può usare il metodo findcontrol con dei caratteri jolly nell'identificativo dell'ID del controllo cercato?

    Io ad esempio devo cercare un controllo il cui id so iniziare per "ABC" e finire con "000": so che nella mia pagina ce n'è solo uno con queste caratteristiche ma non posso sapere a priori cosa c'è in mezzo tra quei due valori perchè la parte intermedia viene generata dinamicamente con un ciclo che inserisce dei numeri progressivi, quindi il mio controllo potrebbe avere ID ABC_1_000 oppure anche ABC_99999999_000...

    Se si può fare, come posso fare per fare quel che voglio fare? :-)
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  2. #2
    Ciao,
    ho avuto anche io in passato una esigenza come la tua.
    Ma non si può fare, perchè la FindControl restituisce un singolo control, e non un insieme.
    Infatti se usi caratteri jolly i controlli restituiti potrebbero essere più d'uno: che ne sa .Net che ce n'è uno solo?

    Quindi nel mio caso ho fatto una funzioncina che si passa tutti i controlli della pagina e se ne trova uno che ha il testo richiesto nell'UniqueID (tramite string.IndexOf() ), allora lo carica in una lista per successive valutazioni.

    Ciao,
    b.

  3. #3
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    Temevo un responso simile.
    Non sarebbe complicato è solo che di controlli nella pagina ne ho un numero abnorme e quello che voglio fare dovrebbe stare dentro a un ciclo che già si spazzola tutti i controlli presenti nella pagina; siccome poi i controlli sono dentro a div contenuti a loro volta in una tabella creata dinamicamente, tanto per farti capire con cosa ho a che fare, attualmente sto cercando i controlli con cicli siffatti

    For Each row As TableRow In tab.Rows
    For Each cell As TableCell In row.Cells
    For Each div As HtmlGenericControl In cell.Controls
    For Each item as checkbox In div.Controls
    If item.Checked Then
    'trovo il controllo che comincia con ABC e finisce con 000

    se devo annidare qui dentro un altro ciclo mi viene il singhiozzo... poi non so anche come tempo di esecuzione cosa diventi...

    Su queste cose l'asp.Net mi pare masochisticamente masturbatorio: è allucinante che quando genero le cose da codebehind, poi debba ripercorrere tutta la catena dei padri dell'oggetto che sto cercando per trovarlo!
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    ciao, premetto che non ho ben chiaro cosa stai facendo, però immagino che tu debba andare a controllare in un controllo specifico qualche input da utente, se così fosse, perchè non prevedere tramite javascript, quando l'utente fa una detta azione in un controllo, questo imposti un campo hidden con il suo id? in questo modo sapresti tramite quel campo di quale controllo si tratta.

    mi scuso in anticipo se non ho compreso nulla

  5. #5
    Non ucciderti con l'identificazione dei tipi...
    Lo fai dopo aver trovato tutti i controlli.
    Fai così:

    Private Sub findControls(ByVal ctl As Control, ByRef Returns As ArrayList)
    For Each c As Control In ctl.Controls
    ' qui gli metti le condizioni per i tipi che non servono
    Returns.Add(c)
    If c.HasControls Then
    findControls(c, Returns)
    End If
    End If
    Next
    End Sub

    la ricorsione ti permette di esplorare qualsiasi contenitore interno alla pagina.
    L'esecuzione è una scheggia perchè si appoggia sulle collection, che sono fatte apposta.

    ciao,
    b.

  6. #6
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    @U235
    ti ringrazio ma è una cosa molto più complicata... te la riassumo dicendo che ho una serie di checkbox relativi a orari di spettacoli: quando seleziono 20, 30, n checkbox poi confermo con un bottone la selezione.
    Lì parte una sub che verifica, riga per riga tra quelle selezionate, se gli orari delle righe selezionate si sormontano e, nel caso, dechekka le righe che sono in conflitto.
    Ecco, il decheckare è il punto dolente :-(

    mmm, mi sovvien quest'idea: siccome mi sto appoggiando anche ad un database per generare i checkbox, potrei memorizzare in un campo l'id del controllo.... ci provo, vediamo cosa riesco a fare
    grazie
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  7. #7
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    @Bear
    scusa ma non capisco come la usi... mi fai un esempio?
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  8. #8
    dim Ctls as new arraylist

    findControls(Page, Ctls)

    in Ctls hai tutti i controlli (anche quelli annidati) contenuti nella pagina.

    {nella funzione findControls puoi filtrare per tipo i tipi di controlli che non ti servono e quindi saltare l'istruzione Returns.Add(c). In questo modo l'arraylist finale avrà meno elementi. Io ad es. filtravo i LiteralControl}

    (Edit) Qui avevo inserito del codice errato.

    Ciao,
    b.

  9. #9
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    ma questa funziona anche con i controlli generati dal codebehind (ad esempio sull'onload)?

    e nell'array list hai solo gli ID dei controlli, giusto? <- no ci sono i controlli interi, ho detto una cacchiata
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  10. #10
    Mi sono dimenticato di dirti che la funzione va lanciata nel onPreRender (private overrides sub onPreRender) della pagina, quando tutti gli oggetti, anche quelli dinamici, sono al loro posto, e non si muoveranno fino alla successiva esecuzione.
    Nell'array ci sono i controlli interi, ma nulla ti vieta di far ritornare un altro arraylist con solo gli id, per fare le ricerche.

    ciao,
    b.

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.