Как я могу остановить ввод ячеек, когда строка просмотра таблицы данных выбирается щелчком заголовка строки? - PullRequest
0 голосов
/ 31 мая 2011

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

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

Есть идеи, как мне этого добиться?

Спасибо

Исаак

Ответы [ 3 ]

2 голосов
/ 31 мая 2011

Задайте свойству ReadOnly для DataGridView значение true или false, в зависимости от того, была ли выбрана одна или несколько строк или изменилось ли CellState в DGV.

Добавьте следующие два события для вашего DataGridView:

private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e) {
    if (e.StateChanged == DataGridViewElementStates.Selected) {
        Console.WriteLine("TRUE");
        dataGridView1.ReadOnly = true;
    }
}

private void dataGridView1_CellStateChanged(object sender, DataGridViewCellStateChangedEventArgs e) {
    if (e.StateChanged == DataGridViewElementStates.Selected) {
        Console.WriteLine("false");
        dataGridView1.ReadOnly = false;
    }
}

Это сработало для меня в моих тестах, но я не удивлюсь, если бы были скрытые "ошибки".

0 голосов
/ 20 января 2017

Основываясь на ответе "Jay R", я немного изменил код, чтобы не потерять флаги ячеек только для чтения.

private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
{
    if (e.StateChanged == DataGridViewElementStates.Selected)
        e.Row.DataGridView.EditMode = DataGridViewEditMode.EditProgrammatically;
}

private void dataGridView1_CellStateChanged(object sender, DataGridViewCellStateChangedEventArgs e)
{
    if (e.StateChanged == DataGridViewElementStates.Selected)
        // adjust the edit mode to your "default" edit mode if you have to
        e.Cell.DataGridView.EditMode = DataGridViewEditMode.EditOnEnter;
}
0 голосов
/ 28 августа 2013

Альтернативное решение может быть примерно таким:

    private void dataGrid_CellEnter(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex == 0 && dataGrid.Rows[e.RowIndex].Selected)
            return;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...