2010-02-11 23 views
2

J'utilise un Infragistics UltraWinGrid v9.1. Je veux permettre à l'utilisateur d'entrer des données numériques dans une cellule, appuyez sur Entrez et ensuite mettre l'accent sur la cellule ci-dessous, comme vous le voyez dans Excel. Il semble que l'événement KeyUp pourrait être meilleur que l'événement KeyPressed pour cela, mais je continue à lancer une exception que je suis allé au-delà des limites de l'UltraWinGrid même si je commence en haut d'une grille complète. Voici le code que j'ai essayé:Comment est-ce que je fais en appuyant sur la touche Entrée provoque le focus à déplacer à la cellule ci-dessous comme le comportement par défaut d'Excel?

private void ugrid_KeyUp(object sender, KeyEventArgs e) 
    { 
     UltraGrid grid = (UltraGrid)sender; 

     if (e.KeyCode == Keys.Enter) 
     { 
      // Go down one row 
      UltraGridCell cell = grid.ActiveCell; 
      int currentRow = grid.ActiveRow.Index; 
      int col = cell.Column.Index; 
      grid.Rows[currentRow + 1].Cells[grid.ActiveCell].Activate(); 
     } 
    } 

Je me attendais à ce faire la cellule dans la même colonne, mais une ligne ci-dessous pour devenir la cellule active à l'appel, grid.Rows [currentRow + 1]. Cellules [grid.ActiveCell] .Activate();

Au lieu de cela une exception est levée:

Une exception de type 'System.IndexOutOfRangeException' a eu lieu dans Infragistics2.Shared.v9.1.dll mais a été pas traitées comme dans le code utilisateur supplémentaire informations : Index était en dehors des limites du tableau.

Puisque je suis sur la ligne 0 et qu'il existe une ligne 1, c'est une surprise pour moi. Les valeurs de currentRow et col sont respectivement 0 et 28. Quelle serait une meilleure approche? btw Je peux le faire de nouveau la cellule ci-dessous, où les valeurs sont currentRow = 1 et col = 28. La même exception est levée.

Répondre

6

Quelqu'un a répondu à ma question sur les forums Infragistics ...

private void ugrid_KeyUp(object sender, KeyEventArgs e) 
    { 
     var grid = (UltraGrid)sender; 

     if (e.KeyCode == Keys.Enter) 
     { 
      // Go down one row 
      grid.PerformAction(UltraGridAction.BelowCell); 
     } 
    } 
2

Je ne sais pas si ce que je dis est valable aussi pour la v9.1 mais vous pouvez aussi faire quelque chose comme ceci:

yourGrid.KeyActionMappings.Add(new GridKeyActionMapping(Keys.Enter, UltraGridAction.BelowCell, 0, UltraGridState.Row, SpecialKeys.All, 0)); 
1
private void ulGrvProducts_KeyUp(object sender, KeyEventArgs e) 
     { 

      UltraGrid grid = (UltraGrid)sender; 

      if (e.KeyCode == Keys.Enter) 
      { 
       //Go down one row 
       grid.PerformAction(UltraGridAction.BelowCell); 
      } 
     } 
0

Après avoir utilisé grid.PerformAction(UltraGridAction.BelowCell), ligne active va changer, mais la cellule suivante est soit pas en mode d'édition.

+0

Si vous utilisez cette "grid.PerformAction (UltraGridAction.EnterEditMode);" après le PerformAction, la cellule sera en mode d'édition. –