DataGridView: как включить выбор нескольких строк, но отключить выбор нескольких ячеек? - PullRequest
3 голосов
/ 19 октября 2010

Я ищу способ включить выбор нескольких строк в DataGridView-Control, но отключить выбор нескольких ячеек.

Что я пробовал до сих пор:

  • DataGridView.MultiSelect = true позволяет выбрать несколько строк и ячеек
  • ClearSelection () в DataGridView_CellMouseClick-Event и повторный выбор последней выделенной ячейки выглядит не очень хорошо (вы видите, что отмена выделения старой ячейки и затем выбор новой ячейки; SuspendLayout () и ResumeLayout () не помогают)
  • DataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect не является опцией: если пользователь щелкает ячейку, должна быть выбрана только эта ячейка

Это для функции экспорта: пользователь должен иметь возможность экспортировать выбранные строки в файл, но в целом он не должен иметь возможность выбирать более одной ячейки (для копирования и вставки и т. Д.).

С уважением,

Inno

----- [ОБНОВЛЕНИЕ] -----

Вот моя реализация. Работает нормально (комментарии убраны для компактности):

using System.Windows.Forms;

namespace YourAmazingNamespace
{
    public partial class SpecialSelectDataGridView: DataGridView
    {
        public SpecialSelectDataGridView()
        {
            InitializeComponent();
        }

        protected override void SetSelectedCellCore(int columnIndex, int rowIndex, bool selected)
        {
            ResetSelectedCells();

            base.SetSelectedCellCore(columnIndex, rowIndex, selected);
        }

        void ResetSelectedCells()
        {
            foreach (DataGridViewCell cell in SelectedCells) {
                base.SetSelectedCellCore(cell.ColumnIndex, cell.RowIndex, false);
            }
        }
    }
}

Несколько строк выбираются с помощью MultiSelect = true (значение по умолчанию), и выбранные в данный момент ячейки сбрасываются путем вызова ResetSelectedCells () перед выбором новой.

HTH, спасибо и всего наилучшего,

Inno

1 Ответ

1 голос
/ 19 октября 2010

Вы можете переопределить SetSelectedRowCore или SetSelectedCelCore и выполнить свой выбор.

MSDN Цитата:

Элемент управления DataGridView использует это метод всякий раз, когда он меняет состояние выбора ячейки. состояние выбора изменяется без учета к текущему свойству SelectionMode значение, и без изменения Значение свойства CurrentCell. Это полезно, когда вы хотите реализовать свой собственные режимы выбора

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

...