Pregunta

Tengo tres controles TextBox en la página

<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True"
        OnTextChanged="TextBox_TextChanged" TabIndex="1">
<asp:TextBox ID="TextBox2" runat="server" AutoPostBack="True"
        OnTextChanged="TextBox_TextChanged" TabIndex="2">
<asp:TextBox ID="TextBox3" runat="server" AutoPostBack="True"
        OnTextChanged="TextBox_TextChanged" TabIndex="3">

y un controlador de eventos

protected void TextBox_TextChanged(object sender, EventArgs e)
{
    WebControl changed_control = (WebControl)sender;

    var next_controls = from WebControl control in changed_control.Parent.Controls
                        where control.TabIndex > changed_control.TabIndex
                        orderby control.TabIndex
                        select control;

    next_controls.DefaultIfEmpty(changed_control).First().Focus();
}

El significado de este código es seleccionar TextBox automáticamente con el siguiente TabIndex después de la publicación de la página (ver El problema de Little JB ). En realidad recibo la excepción InvalidCastException porque es imposible emitir desde System.Web.UI.LiteralControl (WebControl.Controls contiene realmente LiteralControls) a System.Web.UI.WebControls.WebControl.

Estoy interesado, ¿es posible modificar este enfoque de alguna manera para recibir una solución de trabajo? ¡Gracias!

¿Fue útil?

Solución

OfType

from control in changed_control
  .Parent
  .Controls
  .OfType<WebControl>()

Otros consejos

Debería poder usar el método OfType para devolver solo los controles de un tipo determinado.

por ejemplo

var nextcontrols = from WebControl control in     
                   Changed_control.Parent.Controls.OfType<TextBox>()... etc

El problema es que LiteralControl no hereda de WebControl. Sin embargo, no puede tener el foco, por lo que está bien no seleccionarlos. En su declaración LINQ, agregue otra condición que compruebe un control web. Por lo tanto, su línea donde debería estar donde control.TabIndex > changed_control.TabIndex & amp; & amp; el control es WebControl .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top