Frage

Ich habe drei Textboxsteuerelemente auf der Seite

<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">

und ein Event-Handler

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

Die Bedeutung dieses Codes ist automatisch wählen TextBox mit dem nächsten TabIndex nach Seite Post zurück (siehe Little JB das Problem ). In Wirklichkeit erhalte ich InvalidCastException, weil sie von System.Web.UI.LiteralControl zu werfen (WebControl.Controls enthält tatsächlich LiteralControls) zu System.Web.UI.WebControls.WebControl unmöglich ist.

Ich interessiere mich ist es möglich, diese aproach zu modifizieren irgendwie Arbeitslösung zu erhalten? Vielen Dank!

War es hilfreich?

Lösung

OfType

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

Andere Tipps

Sie sollten die OfType Methode verwenden können, um nur Kontrollen eines bestimmten Typs zurück.

z.

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

Das Problem ist, dass LiteralControl nicht von WebControl erbt. Es kann allerdings nicht den Fokus hat, so ist es OK, um sie nicht zu wählen. In Ihrer LINQ-Anweisung, fügen Sie eine weitere Bedingung für eine WebControl überprüfen. So where Linie where control.TabIndex > changed_control.TabIndex && control is WebControl werden sollte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top