Selecionando uma linha em DataGridView programaticamente

109

Como posso selecionar um determinado intervalo de linhas em um DataGridViewprogramaticamente em tempo de execução?

Nagendra
fonte

Respostas:

127

Não testado, mas acho que você pode fazer o seguinte:

dataGrid.Rows[index].Selected = true;

ou você pode fazer o seguinte (mas novamente: não testado):

dataGrid.SelectedRows.Clear();
foreach(DataGridViewRow row in dataGrid.Rows)
{
    if(YOUR CONDITION)
       row.Selected = true;
}
Christoph Fink
fonte
Cuidado se o seu DataGridView for read-only- então SelectedRows.Clear()não funcionará.
Derek W
14
Em vez de SelectedRows.Clear (), use o método ClearSelection () da instância datagridview
Furkan
1
@Furkan: Isso não faz a mesma coisa. Com SelectedRows.Clear()apenas as linhas selecionadas são apagadas, mas com ClearSelection()também as colunas => as seleções de coluna são perdidas ...
Christoph Fink
17
adicione uma linha de códigodataGrid.CurrentCell = dataGrid.Rows[row.Index].Cells[0];
Atemporal de
2
@Timeless: o evento SelectionChanged não parece ser acionado ao testar sua sugestão.
user2430797
34

No Visual Basic, faça isso para selecionar uma linha em um DataGridView; a linha selecionada aparecerá com uma cor destacada, mas observe que a posição do cursor não mudará:

Grid.Rows(0).Selected = True

Faça isso, altere a posição do cursor:

Grid.CurrentCell = Grid.Rows(0).Cells(0)

Combinar as linhas acima posicionará o cursor e selecionará uma linha. Este é o procedimento padrão para focar e selecionar uma linha em DataGridView:

Grid.CurrentCell = Grid.Rows(0).Cells(0)
Grid.Rows(0).Selected = True
Rodrigo T.
fonte
Grid.Rows (0) .Cells (0) é muito útil no caso de dados da grade mais longos do que a área de exibição da grade. A ordem mencionada acima não é necessária, você pode deslizar o código para seleção de linha / célula [fonte: Testado pessoalmente].
BiLaL
Como mover a grade para a posição selecionada? A linha está selecionada, mas a posição da grade não está na linha selecionada. A rolagem manual mostra a linha selecionada. Como forçar a grade a rolar?
FrenkyB
Veja que: FirstDisplayedScrollingRowIndex
Rodrigo T.
12
DataGridView.Rows
    .OfType<DataGridViewRow>()
     .Where(x => (int)x.Cells["Id"].Value == pId)
     .ToArray<DataGridViewRow>()[0]
     .Selected = true;
IM999MaxBonum
fonte
0
 <GridViewName>.ClearSelection(); ----------------------------------------------------1
 foreach(var item in itemList) -------------------------------------------------------2
 {
    rowHandle =<GridViewName>.LocateByValue("UniqueProperty_Name", item.unique_id );--3
    if (rowHandle != GridControl.InvalidRowHandle)------------------------------------4
    {
        <GridViewName>.SelectRow(rowHandle);------------------------------------ -----5
    }
  }
  1. Limpe todas as seleções anteriores.
  2. Faça um loop pelas linhas que precisam ser selecionadas em sua grade.
  3. Obtenha suas alças de linha da grade (observe que a grade já está atualizada com novas linhas)
  4. Verificar se o identificador de linha é válido ou não.
  5. Quando o identificador de linha for válido, selecione-o.

Onde itemList é uma lista de linhas a serem selecionadas na visualização em grade.

IFlyHigh
fonte
0

Experimente isto:

datagridview.Rows[currentRow].Cells[0];
Ganesh Kamath - 'Code Frenzy'
fonte
datagridview.Rows[currentRow].Cells[0] Obtém ... a célula no local de índice fornecido. Como isso seleciona um determinado intervalo de linhas, conforme solicitado na pergunta?
dbc
-1

Ao definir uma linha Selecionada de um DataGridView no momento do carregamento, considere lidar com isso no evento DataBindingComplete, porque ele pode ser substituído por padrão.

Daniel Ohm
fonte
-1

Experimente isto:

DataGridViewRow row = dataGridView1.Rows[index row you want];
dataGridView1.CurrentRow = row;

Espero que esta ajuda!

lecntp
fonte