Domanda

Ho tre controlli TextBox nella pagina

<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 un gestore eventi

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

Il significato di questo codice è selezionare automaticamente TextBox con il prossimo TabIndex dopo il ritorno della pagina (vedi Problema di Little JB ). In realtà ricevo InvalidCastException perché è impossibile eseguire il cast da System.Web.UI.LiteralControl (WebControl.Controls contiene effettivamente LiteralControls) su System.Web.UI.WebControls.WebControl.

Sono interessato è possibile modificare questo approccio in qualche modo per ricevere una soluzione funzionante? Grazie!

È stato utile?

Soluzione

OfType

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

Altri suggerimenti

Dovresti essere in grado di utilizzare il metodo OfType per restituire solo i controlli di un determinato tipo.

es.

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

Il problema è che LiteralControl non eredita da WebControl. Tuttavia, non può avere lo stato attivo, quindi è OK non selezionarli. Nell'istruzione LINQ, aggiungere un'altra condizione verificando un WebControl. Quindi la tua linea di destinazione dovrebbe essere dove control.TabIndex > changed_control.TabIndex & amp; & amp; control è WebControl .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top