Desabilitar a seleção de linhas em um datagridview
-
09-06-2019 - |
Pergunta
Quero desabilitar a seleção de determinadas linhas em um datagridview.
Deve ser possível remover a propriedade select para uma ou mais linhas do datagridview em um datagridview mostrado em um winform.O objetivo é que o usuário não possa selecionar determinadas linhas.(dependendo de uma condição)
Obrigado,
Solução
Se SelectionMode for FullRowSelect, você precisará substituir SetSelectedRowCore para esse DataGridView e não chamar o SetSelectedRowCore base para linhas que você não deseja selecionar.
Se SelectionMode não for FullRowSelect, você desejará substituir adicionalmente SetSelectedCellCore (e não chamar o SetSelectedCellCore base para linhas que você não deseja selecionar), pois SetSelectedRowCore só será ativado se você clicar no cabeçalho da linha e não em uma célula individual.
Aqui está um exemplo:
public class MyDataGridView : DataGridView
{
protected override void SetSelectedRowCore(int rowIndex, bool selected)
{
if (selected && WantRowSelection(rowIndex))
{
base.SetSelectedRowCore(rowIndex, selected);
}
}
protected virtual void SetSelectedCellCore(int columnIndex, int rowIndex, bool selected)
{
if (selected && WantRowSelection(rowIndex))
{
base.SetSelectedRowCore(rowIndex, selected);
}
}
bool WantRowSelection(int rowIndex)
{
//return true if you want the row to be selectable, false otherwise
}
}
Se você estiver usando WinForms, abra seu designer.cs para o formulário relevante e altere a declaração de sua instância DataGridView para usar esta nova classe em vez de DataGridView e também substitua this.blahblahblah = new System.Windows.Forms. DataGridView() para apontar para a nova classe.
Outras dicas
Private Sub dgvSomeDataGridView_SelectionChanged(sender As Object, e As System.EventArgs) Handles dgvSomeDataGridView.SelectionChanged
dgvSomeDataGridView.ClearSelection()
End Sub