изменение фокуса на следующую ячейку с использованием сетки данных xeed в c # - PullRequest
0 голосов
/ 31 августа 2011

Я новичок в программировании на C.Мне нужно внести изменения в наш проект.В основном мы используем сетку данных Xeed, которая имеет 4 столбца.Данные связаны с объектом коллекции и динамически обновляются при вызове БД.У меня вопрос из 4 столбцов, 1 столбец редактируемый.когда пользователь вносит изменения в этот столбец и нажимает клавишу ввода, фокус должен измениться на ячейку ниже в том же столбце в режиме редактирования.Следующее событие KeyUp я пишу.После внесения изменений в этот столбец и попадание введите фокус, чтобы перейти к следующей строке, но режим редактирования не перейдет к следующей ячейке, а вместо этого останется в той же ячейке, которая была отредактирована.

private void _dataGrid_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
    _dataGrid.EndEdit();
    int currentRow = _dataGrid.SelectedIndex;
    currentRow++;
    _dataGrid.SelectedIndex = currentRow;
    _dataGrid.Focus() ;
    _dataGrid.BeginEdit();
    }
}

Ответы [ 2 ]

0 голосов
/ 01 сентября 2011

После решения

private void _dataGrid_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        int rowCount = _dataGrid.Items.Count;
        int currentRow = _dataGrid.SelectedIndex;

        if (rowCount - 1 > currentRow)
            currentRow++;
        else
            currentRow = 0;

        _dataGrid.CurrentItem = _dataGrid.Items[currentRow];
        _dataGrid.BringItemIntoView(_dataGrid.Items[currentRow]);

    }
}
0 голосов
/ 31 августа 2011

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

private void _dataGrid_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
       _dataGrid.EndEdit();
       int nextIndex = _dataGrid.SelectedIndex + 1;
       //should crash when enter hit after editing last row, so need to check it
       if(nextIndex < _dataGrid.items.Count)
       {
          _dataGrid.SelectedIndex = nextIndex;
          _dataGrid.CurrentItem = _dataGrid.Items[nextIndex];
        }
       _dataGrid.BeginEdit();
    }
}
...