Запретить выделение первой ячейки DataGridView при щелчке по заголовку строки - PullRequest
0 голосов
/ 19 марта 2020

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

Вот пример того, что происходит: DGV Row Selected

Как видите, первая ячейка имеет фокус и пользователь может редактировать эту ячейку, когда все, что было сделано, - щелчок по заголовку строки.

Я попытался ответить на этот вопрос SO , но ни одно событие не сработало, когда я щелкнул строку заголовок. Вот код, который я использовал для этой попытки:

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

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

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

DGV SelectionMode установлен в RowHeaderSelect.

Мне все еще нужно иметь возможность получить скрытое поле «id» в строке для процесса удаления. Вот мой код для этого:

private void btnDeleteRow_Click(object sender, EventArgs e)
{
    int index = dgvCategories.SelectedRows[0].Index;
    string rowId = dgvCategories[0, index].Value.ToString();

    string deleteString = string.Format("DELETE FROM masterfiles.xref WHERE id = " + rowId);

    conn.Open();
    NpgsqlCommand deleteCmd = new NpgsqlCommand(deleteString, conn);
    deleteCmd.ExecuteNonQuery();
    conn.Close();
}

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

1 Ответ

0 голосов
/ 21 марта 2020

Попробуйте:
1 - сделать выбор DataGridView одной строкой вместо одной ячейки.
2 - Отключить, позволяя пользователю редактировать DataGridView.
3 - Сделать DataGridView ReadOnly.
Делать 1 & 2 все время кроме операции редактирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...