¿Cómo acceder a los controles en la plantilla de diseño de la vista de lista?

StackOverflow https://stackoverflow.com/questions/48616

  •  09-06-2019
  •  | 
  •  

Pregunta

¿Cómo configuro una propiedad de un control de usuario en ListView's LayoutTemplate del código subyacente?

<asp:ListView ...>
<LayoutTemplate>
<myprefix:MyControl id="myControl" ... />
</LayoutTemplate>
...
</asp:ListView>

Quiero hacer esto:

myControl.SomeProperty = somevalue;

Tenga en cuenta que mi control no está en ItemTemplate, Está dentro LayoutTemplate, por lo que no existe para todos los elementos, existe sólo una vez.Por lo tanto, debería poder acceder a él una vez, no para cada elemento vinculado a datos.

¿Fue útil?

Solución

Para establecer una propiedad de un control que está dentro de LayoutTemplate, simplemente use el método FindControl en el control ListView.

var control = (MyControl)myListView.FindControl("myControlId");

Otros consejos

var control = (MyControl)myListView.FindControl("myControlId");

Esto funcionará, pero asegúrese de hacerlo después del enlace de datos o no se habrá creado LayoutTemplate, lo que generará un error.

Utilizar el BuscarControl método en cada ListViewItem.

var control = (MyControl)Item.FindControl("yourControlId");

Esto ha sido respondido en esta pregunta de Stack Overflow:
Acceda a un control dentro de LayoutTemplate de un ListView

Vea el comentario sobre la respuesta aceptada por tanathos.

Sé que esto me preguntaron hace más de un año, pero es uno de los primeros resultados del término de búsqueda que solía obtener aquí, así que quería dejar la respuesta para cualquiera que lo haya encontrado.

El diseño se crea y activa un evento LayoutCreated que dice que el diseño se ha creado en el sistema.

Luego, puedes usar listview.FindControl para obtener una referencia a ese control.

En caso de que necesites la versión VB.net, aquí la tienes:

Dim control = CType(myListView.FindControl("myControlId"), MyControl)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top