Мои навыки winforms немного ржавые. Я использую BindingSource
для DataGridView
. На KeyDown
DataGridView
Я хочу выбрать следующую/предыдущую запись, которая работает по желанию.BindingSource MoveFirst/MoveLast не работает
Я хочу выбрать первое, если пользователь нажмет Keys.Down
, когда выбран последний элемент, и выберите последний, если он ударит Keys.Up
, когда выбран первый элемент. Но тогда ничего не происходит.
Вот код:
private void Grid_Keydown(Object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Up)
previousItem();
else if (e.KeyCode == Keys.Down)
nextItem();
}
private void previousItem()
{
BindingSource bs = null;
switch (this.Type) // a custom enum
{
case AdminType.Channel:
bs = channelBindingSource;
break;
default:
break;
}
if (bs.Position - 1 < 0)
bs.MoveLast();
else
bs.MovePrevious();
}
private void nextItem()
{
BindingSource bs = null;
switch (this.Type)
{
case AdminType.Channel:
bs = channelBindingSource;
break;
default:
break;
}
if (bs.Position + 1 >= bs.Count)
bs.MoveFirst();
else
bs.MoveNext();
}
Обратите внимание, что bs.MoveFirst()
/bs.MoveLast()
называются правильно, но ничего не происходит.
Edit: Интересно, это работает, как ожидалось, когда я вызвать это с помощью кнопки (предыдущий/следующий) вместо DataGridView
«s OnKeyDown
, какие идеи?
вы могли бы попробовать bs.EndEdit(), после moveFirst/Last? – NDJ
@NDJ: Спасибо, но не работает. –
может быть что-то в сетке переопределяет позицию bs. попробуйте использовать «более позднее» событие, например «KeyUp» –