El second example you found casi funciona, solo falta un poco. Todo lo que se necesitaba eran 2 métodos en el control principal.
Agregue este código al archivo AppointmentControl.cs
y funcionará.
protected override object SaveViewState()
{
if (appointments != null)
return appointments.SaveViewState();
return null;
}
protected override void LoadViewState(object savedState)
{
appointments = new AppointmentCollection();
appointments.LoadViewState(savedState);
}
El código en el sitio de ejemplo era bastante decente. Implementó todas las interfaces que debería tener e hizo un trabajo bastante bueno. Donde se derrumbó fue que, a pesar de tener todo el código que necesitaba en los bits abstractos, eso no importaba porque las interfaces no estaban referenciadas en los lugares donde debían estar.
Las clases de colección utilizadas no tenían nada "especial" sobre ellas, aparte de la implementación de algunas interfaces. El marco no llamará automáticamente a estos métodos. El marco será, pero llame a los métodos reemplazados que escribí anteriormente, que debe implementar para que su control pueda guardar los elementos en la colección. Mientras los llames, todo funcionará.
Aquí hay un [enlace actualizado al segundo ejemplo] (http://blog.spontaneouspublicity.com/child-collections-in-asp-net-custom-controls) –
Gracias por la actualización. – Larsenal