Выделение строк datagridview C#

394
09 декабря 2016, 08:45

Нужно, что бы при нажатом Ctrl строки выделялись, и не снималось выделение при повторном клике на одну из выделенных строк. То есть - зажали Ctrl - > кликнули на строку с индексом 0 -> она стала синей - > и сколько бы мы на нее не кликали синей она и останется, пока нажат Ctrl. Как сделать? Сейчас у меня так :

    private void gridAction_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Control == true)
            gridAction.MultiSelect = true;               
    }
    private void gridAction_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.Control == false)
            gridAction.MultiSelect = false;   
    }

Но мне нужно запретить снимать выделение со строки если нажат Ctrl.

Answer 1

Я придумал такой велосипед.

Добавьте поле формы:

List<DataGridViewRow> selectedRows = new List<DataGridViewRow>();

Это будет список выделенных в текущий момент строк.

Подпишите DataGridView на событие SelectionChanged и разместите в нём следующий код:

private void DataGridView_SelectionChanged(object sender, EventArgs e)
{
    // Нажата клавиша Control
    if ((ModifierKeys & Keys.Control) == Keys.Control)
    {
        if (dataGridView.SelectedRows.Count > selectedRows.Count)
        {
            selectedRows.Clear();
            selectedRows.AddRange(dataGridView.SelectedRows.Cast<DataGridViewRow>());
        }
        else
        {
            foreach (var row in selectedRows)
                row.Selected = true;
        }
    }
    else
    {
        selectedRows.Clear();
    }
}

Логика такая. При нажатой клавише Control, если выделенных строк больше, чем в нашем списке, то добавляем в него все эти выделенные строки. Если выделенных строк стало меньше (то есть пользователь кликнул по ранее выделенной строке), то восстанавливаем выделение из нашего списка.

Когда выделение строк меняется без нажатой клавиши Control, очищаем наш список.

READ ALSO
Помогите пожалуйста разобраться в коде

Помогите пожалуйста разобраться в коде

Может ли кто-то объяснить значение третьей строки в коде?

223
Изменить курсор на свой C# WinForms

Изменить курсор на свой C# WinForms

Подскажите как изменить курсор на свой? Делаю так :

374
Entity Framework прямой запрос без контекста базы

Entity Framework прямой запрос без контекста базы

Возможно ли сделать запрос используя средства EF не описывая при этом контекст базы данных, либо создав и описав его непосредственно в функции...

268
Переименовывание файла на сервере

Переименовывание файла на сервере

Вот у меня закачен на сервере файл "файлtxt", и мне его надо без перекачки переименовать

230