Infragistics Ultragrid — не перемещаться ниже строки при выборе крайнего правого столбца

#c# #infragistics #ultrawingrid

#c# #инфраструктура #ultrawingrid

Вопрос:

Есть ли какой-либо способ заставить Infragistics Ultragrid не перемещаться ниже строки при нажатии клавиши со стрелкой вправо в последнем столбце?

например, имея таблицу ниже, находясь в ячейке со значением «C» (COL_1, строка 1) — если я нажимаю клавишу со стрелкой вправо, она перемещает меня в строку ниже (значение D), в то время как я хотел бы остаться в той же строке, в той же ячейке (поскольку я достиг «конца» строки)

    COL_A | COL_B | COL_C
1    A      B        C
2    D      ...
  

Ответ №1:

KeyDown Событие для UltraGrid также может использоваться для реализации этой функциональности:

 private void ultraGrid1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Right amp;amp; sender is UltraGrid ug)
    {
        if ((ug.CurrentState amp; UltraGridState.CellLast) == UltraGridState.CellLast)
            e.Handled = true;
    }
}
  

Комментарии:

1. Спасибо — это именно то, что я искал!

Ответ №2:

Навигация в сетке является результатом KyeActionMapping по умолчанию. Что вы можете сделать, это удалить сопоставление справа и добавить новое, предотвращающее такое состояние последней ячейки:

 // Get the mappings related to Right key and remove them from KeyActionMappings
var mappings = this.ultraGrid1.KeyActionMappings.GetActionMappings(Keys.Right, 1, 0);
foreach (var mapping in mappings)
{
    this.ultraGrid1.KeyActionMappings.Remove(mapping);
}

// Add new KeyActionMappings
this.ultraGrid1.KeyActionMappings.Add(
    new GridKeyActionMapping(
        Keys.Right, 
        UltraGridAction.NextCell,
        UltraGridState.CellLast,
        UltraGridState.Cell,
        SpecialKeys.AltCtrl,
        0,
        true));
  

Комментарии:

1. Спасибо за ответ — это работает, но только частично — теперь, когда я перехожу к последнему столбцу, а затем нажимаю еще раз клавишу со стрелкой вправо, я фокусирую следующий элемент управления, пока я хочу остановиться в той же ячейке (чтобы я мог нажать стрелку влево, чтобы вернуться назад)