Как мне остановить DataGridView с набором фильтров, чтобы он не зашел слишком далеко вниз по списку? - PullRequest
2 голосов
/ 24 июня 2011

Рассмотрим dataGridView, привязанный к некоторой базе данных.Источник привязки для dataGridView имеет фильтр, который будет показывать только то, где поле описания пусто.

Идея состоит в том, что пользователь будет видеть только записи с этим значением, записи, которые требуют их внимания.Пользователь всегда будет менять это значение на что-то другое.

Моя проблема в том, что когда они переходят к следующему ряду с помощью клавиши ввода или табуляции, он фильтрует почти после того, как переместился в следующий ряд, перемещая свое положение в ряд ниже, где они должны быть.

Есть ли способ контролировать это поведение, чтобы позиция не переходила к следующему ряду после фильтрации?Я не хочу делать отдельные заливки в наборе данных для этого конкретного вопроса, хотя я знаю, что это решение.Я хотел бы знать, как лучше контролировать фильтрацию, если это возможно.

РЕДАКТИРОВАТЬ

Стоит отметить, что я не связал события с представлением данных, этоготовое поведение при перетаскивании элемента управления на форму, подключении к нему источника привязки из набора данных и заполнении набора данных в событии form_load.

EDIT

Пример текущего поведения - (C) представляет местоположение курсора

Пользователь вводит имя в строке # 2 и устанавливает статус TRUE

R1 - John Doe     FALSE
R2 - Jane Doe     TRUE (C)
R3 - Rob  Doe     FALSE
R4 - Joe  Doe     FALSE

Пользователь нажимает клавишу возврата (илиtab, не имеет значения, для какого примера его ввод ...)

R1 - John Doe     FALSE 
R3 - Rob  Doe     FALSE 
R4 - Joe  Doe     FALSE (C)

Текущая выбранная строка теперь является строкой 4, где она действительно должна быть строкой 3. Если я не изменил значениеот ложного до истинного для R2, ​​он не отфильтровывался бы и правильно переместил бы меня в строку 3

РЕДАКТИРОВАТЬ

Воскресив это из мертвых, как я не сделалполучил подходящее решение этой проблемы.У кого-нибудь есть креативная идея?^ _ ^

1 Ответ

1 голос
/ 24 июня 2011

У меня была такая же проблема с DataGridView некоторое время назад.
Я хотел изменить поведение клавиши Enter для перемещения выбранных строк вверх, а не вниз. Вот что я сделал, надеюсь, это поможет вам. Я создал элемент управления, который наследует DataGridView, и переопределил ProcessCmdKey и внес в него изменения. В вашем случае, что вы хотите сделать, это:

public partial class MyDataGridView : DataGridView
{
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == Keys.Tab || keyData == Keys.Enter)
        {
            return true;
        }

        return base.ProcessCmdKey(ref msg, keyData);
    }
}

Это остановит перемещение gridView к следующей строке при нажатии Enter или Tab. Я надеюсь, что это работает для вас, если это не скажите, пожалуйста, в чем проблема.

...