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.

È stato utile?

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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top