asp.net - ejemplos - telerik asp net c#
Encontrar todos los controles en un panel ASP.NET? (5)
Depende de la biblioteca de UI o el idioma que esté utilizando, los controles de contenedor como los paneles mantienen una lista de controles secundarios. Para comprobar si un formulario / página contiene datos, debe buscar de forma recursiva en cada panel controles de entrada de datos, como cuadros de texto. Luego pruebe si alguno de los controles de entrada de datos contiene valores distintos al valor predeterminado.
Una solución más simple sería implementar una clase de observador que se una a los eventos modificados de sus controles de datos. Si el observador se activa, su página tiene cambios. Deberá tener en cuenta acciones como cambiar y luego revertir datos.
Tengo una serie de paneles en mi página en los que estoy recopilando información del usuario y guardando los detalles de la página. El panel de la página tiene cuadro de texto, lista desplegable, cuadro de lista.
Cuando necesito llegar a esta página. Necesito mostrar la página si estos controles tienen algún valor. ¿Como hacer esto?
Puede pasar por los controles de los paneles
foreach (Control c in MyPanel.Controls)
{
if (c is Textbox) {
// do something with textbox
} else if (c is Checkbox) {
/// do something with checkbox
}
}
Si los tiene anidados dentro, necesitará una función que lo haga recursivamente.
Todo se reduce a enumerar todos los controles en la jerarquía de control:
IEnumerable<Control> EnumerateControlsRecursive(Control parent)
{
foreach (Control child in parent.Controls)
{
yield return child;
foreach (Control descendant in EnumerateControlsRecursive(child))
yield return descendant;
}
}
Puedes usarlo así:
foreach (Control c in EnumerateControlsRecursive(Page))
{
if(c is TextBox)
{
// do something useful
}
}
Solución muy similar a la de Cristian aquí, que usa recursividad y genéricos para encontrar cualquier control en la página (puede especificar el control para comenzar la búsqueda).
Sé que esta es una publicación anterior, y realmente me gustó la solución de christian libardo . Sin embargo, no me gusta el hecho de que para ceder un conjunto completo de elementos al ámbito externo tendría que repetir sobre esos elementos una vez más solo para cederlos a mí desde un ámbito interno al alcance actual. Yo prefiero:
IEnumerable<Control> getCtls(Control par)
{
List<Control> ret = new List<Control>();
foreach (Control c in par.Controls)
{
ret.Add(c);
ret.AddRange(getCtls(c));
}
return (IEnumerable<Control>)ret;
}
Lo que me permite usarlo así:
foreach (Button but in getCtls(Page).OfType<Button>())
{
//disable the button
but.Enabled = false;
}