Come accedere ai controlli listview, layouttemplate?
Domanda
Come faccio a impostare una proprietà di un controllo utente in ListView
's LayoutTemplate
dal codice-dietro?
<asp:ListView ...>
<LayoutTemplate>
<myprefix:MyControl id="myControl" ... />
</LayoutTemplate>
...
</asp:ListView>
Io voglio fare questo:
myControl.SomeProperty = somevalue;
Si prega di notare che il controllo non è in ItemTemplate
, è in LayoutTemplate
, quindi non esiste per tutti gli elementi, esiste soltanto una volta.Quindi dovrei essere in grado di accedere a una volta e non per ogni tipo di dati associato voce.
Soluzione
Per impostare una proprietà di un controllo all'interno del LayoutTemplate, è sufficiente utilizzare il metodo FindControl il controllo ListView.
var control = (MyControl)myListView.FindControl("myControlId");
Altri suggerimenti
var control = (MyControl)myListView.FindControl("myControlId");
Questo funzionerà, ma assicurati di farlo dopo i dati di associazione o il LayoutTemplate non sono stati creati quindi gettare un errore.
Utilizzare il FindControl metodo su ogni ListViewItem.
var control = (MyControl)Item.FindControl("yourControlId");
Questo è stato risposto in questo Stack Overflow domanda:
Accedere a un controllo all'interno di un LayoutTemplate di un controllo ListView
Vedi il commento su accettati risposta da tanathos.
So che questo è stato chiesto più di un anno fa, ma è uno dei primi risultati per il termine di ricerca che ho usato per arrivare qui, così ho voluto lasciare la risposta per chiunque inciampato su di esso.
Il layout viene creato, e spara un LayoutCreated evento che dice che il layout è stato creato nel sistema.
Quindi, è possibile utilizzare listview.FindControl per ottenere un riferimento a tale controllo.
Nel caso In cui avete bisogno VB.net versione, qui è:
Dim control = CType(myListView.FindControl("myControlId"), MyControl)