2009-11-19 2 views
2

Il semble que lors de l'ajout d'une ligne à un GridView ASP.NET, l'index de tabulation ne se comporte pas comme prévu (ou souhaité). Au lieu de tabuler sur chaque colonne d'une rangée puis de passer à la rangée suivante, l'onglet descendra chaque rangée d'une colonne, puis passera à la colonne suivante et ainsi de suite. Autrement dit, il va tabuler verticalement au lieu d'horizontalement. Cela peut être un problème pour les applications de saisie de données où un utilisateur dépend fortement de la saisie au clavier.ASP.NET C# GridView Tab Index problème

Des solutions à ce problème?

Répondre

5

J'ai été vissage avec ceci pendant un moment et ai cette solution! J'espère que cela aidera d'autres personnes qui ont le même problème.

protected void theGridView_DataBound(object sender, EventArgs e) 
{ 
    SetTabIndexes(); 
} 


private void SetTabIndexes() 
{ 
    short currentTabIndex = 0; 
    inputFieldBeforeGridView.TabIndex = ++currentTabIndex; 

    foreach (GridViewRow gvr in theGridView.Rows) 
    { 
     DropDownList dropDown1 = (DropDownList)gvr.FindControl("dropDown1"); 
     dropDown1.TabIndex = ++currentTabIndex; 

     TextBox inputField1 = (TextBox)gvr.FindControl("inputField1"); 
     inputField1.TabIndex = ++currentTabIndex; 

     TextBox inputField2 = (TextBox)gvr.FindControl("inputField2"); 
     inputField2.TabIndex = ++currentTabIndex; 

     TextBox inputField3 = (TextBox)gvr.FindControl("inputField3"); 
     inputField3.TabIndex = ++currentTabIndex; 
    } 

    someLinkAfterGridView.TabIndex = ++currentTabIndex; 
} 
0

Vous pouvez affecter les TabIndex pour tous vos contrôles dans la grille manuellement sur l'événement rowdatabound. Déterminez combien de contrôles vous souhaitez onglet mais sur une ligne spécifique, puis en fonction de l'index de ligne suffit de formuler l'ordre des onglets.

+0

exactement! C'était plus une question de sortir pour d'autres qui pourraient google-ce problème. Je n'ai rien trouvé là-bas. Alors voilà! – a432511

5

Jetez un oeil à Automatically create TabIndex in a repeater

Pour chaque commande, vous pouvez régler le TabIndex à une propriété dans le code derrière.

<asp:GridView ID="gv" runat="server"> 
    <columns> 
    <asp:TemplateField HeaderText="Action" ShowHeader="False" Visible="true"> 
     <ItemTemplate> 
     <asp:CheckBox ID="cbGroup" Checked="true" runat="server" TabIndex='<%# TabIndex %>' Text='<%# Eval("Title") %>' /> 
     </ItemTemplate> 
    </asp:TemplateField> 
    </columns> 
</asp:GridVeiw> 

Ensuite, dans le code derrière incrémenter un compteur TabIndex:

private int _tabIndex = 0; 

public int TabIndex 
{ 
    get 
    { 
    _tabIndex++; 
    return _tabIndex; 
    } 
} 
+0

+1 solution propre et élégante, merci d'inclure et de donner crédit à l'auteur original. –