Как сделать нажатие на нажатие клавиши Enter, чтобы переместиться в ячейку ниже, как поведение Excel по умолчанию?
-
20-09-2019 - |
Вопрос
Я использую инфрагистический ультравингрид v9.1. Я хочу позволить пользователю вводить числовые данные в ячейку, нажмите Войти А затем сосредоточитесь на ячейке ниже, как вы видите в Excel. Похоже, что событие Keyup может быть лучше, чем для этого важного события, но я продолжаю выпускать исключение, которое я вышел за пределы UltrawingRid, хотя я начинаю на вершине полной сетки. Вот код, который я пробовал:
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();
}
}
Я ожидал, что это сделает ячейку в том же столбце, но в одну строку ниже, чтобы стать активной ячейкой с вызовом, Grid.Rows [CurrentRow + 1] .cells [Grid.ActiveCell] .Activate ();
Вместо этого брошено исключение:
Исключение типа 'System.indexoutofrangeException' произошло в Infragistics2.shared.v9.1.dll, но не обрабатывалась в коде пользователя. Дополнительная информация: индекс находился за пределами массива.
Поскольку я в ряду 0, и существует ряд 1, это для меня сюрприз. Значения для Currentrow и Col составляют 0 и 28 соответственно. Что будет лучшим подходом? Кстати, я могу сделать это снова с ячейкой ниже, где значения являются currentrow = 1 и col = 28. То же исключение брошено.
Решение
Кто -то ответил на мой вопрос на инфрагистическом форуме ...
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);
}
}
Другие советы
Я не знаю, действительно ли то, что я говорю, также для v9.1, но вы также можете сделать что -то вроде этого:
yourGrid.KeyActionMappings.Add(new GridKeyActionMapping(Keys.Enter, UltraGridAction.BelowCell, 0, UltraGridState.Row, SpecialKeys.All, 0));
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);
}
}
После использования grid.PerformAction(UltraGridAction.BelowCell)
, Active Row изменится, но следующая ячейка не будет в режиме редактирования.