Pergunta

Eu tenho três controles TextBox na 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">

e um manipulador 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();
}

O significado deste código é selecionar automaticamente TextBox com a próxima TabIndex após página posto de volta (veja problema de Little JB). Na realidade eu recebo InvalidCastException porque é impossível elenco de System.Web.UI.LiteralControl (WebControl.Controls contém realmente LiteralControls) para System.Web.UI.WebControls.WebControl.

Estou interessado é possível modificar este aproach de alguma forma para receber a solução de trabalho? Obrigado!

Foi útil?

Solução

OfType

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

Outras dicas

Você deve ser capaz de usar o método OfType, para retornar apenas os controles de um determinado tipo.

por exemplo.

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

O problema é que LiteralControl não herda de WebControl. Ele não pode ter o foco, porém, por isso é OK para não selecioná-los. Em sua declaração de LINQ, adicionar outra condição a verificação de um WebControl. Portanto, sua linha onde deve ser where control.TabIndex > changed_control.TabIndex && control is WebControl.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top