DataGridView, который всегда ссорится выбранный

Я использую DGV для показа списка изображений с текстовыми подписями как picklist. Их должен всегда быть один и только один выбор, сделанный в списке. Я не могу найти способ препятствовать тому, чтобы пользователь очистил выбор щелчком управления по выбранной строке.

Существует ли свойство в разработчике, которого я скучаю, который мог сделать это?

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

Существует ли третий подход, который я мог проявить, это является менее громоздким, чем моя вторая идея?

7
задан Dan Neely 16 March 2010 в 12:49
поделиться

2 ответа

Самый простой способ - перехватить событие SelectionChanged и проверить, не снял ли пользователь выделение со всех строк. Если это так, повторно выберите ранее выбранную строку. По сути, вы перехватываете их действие и переключаете выбор обратно.Примерно так (код не тестировался, но вы поймете идею):

    DataGridViewRow last_selected_row;
    private void dgv_SelectionChanged(object sender, EventArgs e)
    {
            if (dgv.SelectedRows.Count == 0) 
                    last_selected_row.Selected = true;
            else
                    last_selected_row = dgv.SelectedRows[0];
    }

В зависимости от вашего приложения, может быть лучше сохранить индекс строки, а не ссылку на саму строку. Также не забудьте инициализировать last_selected_row и обновить его, если вы удалите какие-либо строки.

Любые другие элементы управления, которые перехватывают событие SelectionChanged , должны будут безопасно обрабатывать случай, когда не выбраны никакие строки, в случае, если они срабатывают до события, которое переключает их обратно. Однако они могут просто вернуться немедленно, зная, что SelectionChanged мгновенно сработает снова.

Вы также можете создать подкласс DataGridView и переопределить метод OnSelectionChanged . Затем вы можете повторно выбрать последнюю выбранную строку перед срабатыванием события (оно сработает при вызове base.OnSelectionChanged ).

2
ответ дан 7 December 2019 в 18:42
поделиться

У DGV есть свойство, называемое множественным выбором, если вы установите для него значение false, одновременно можно выбрать только одну ячейку / строку.

0
ответ дан 7 December 2019 в 18:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: