Sélection d'une ligne dans DataGridView par programmation

109

Comment puis-je sélectionner une plage particulière de lignes dans un DataGridViewprogramme au moment de l'exécution?

Nagendra
la source

Réponses:

128

Non testé, mais je pense que vous pouvez faire ce qui suit:

dataGrid.Rows[index].Selected = true;

ou vous pouvez faire ce qui suit (mais encore une fois: non testé):

dataGrid.SelectedRows.Clear();
foreach(DataGridViewRow row in dataGrid.Rows)
{
    if(YOUR CONDITION)
       row.Selected = true;
}
Christoph Fink
la source
Méfiez-vous si votre DataGridView est read-only- alors SelectedRows.Clear()ne fonctionnera pas.
Derek W
14
Au lieu de SelectedRows.Clear (), utilisez la méthode ClearSelection () de l'instance datagridview
Furkan
1
@Furkan: Cela ne fait pas la même chose. Avec SelectedRows.Clear()seulement les lignes sélectionnées sont effacées, mais avec ClearSelection()aussi les colonnes => les sélections de colonnes sont perdues ...
Christoph Fink
17
ajouter une ligne de codedataGrid.CurrentCell = dataGrid.Rows[row.Index].Cells[0];
Timeless
2
@Timeless: l'événement SelectionChanged ne semble pas être déclenché lors du test de votre suggestion.
user2430797
34

Dans Visual Basic, procédez comme suit pour sélectionner une ligne dans un DataGridView; la ligne sélectionnée apparaîtra avec une couleur en surbrillance mais notez que la position du curseur ne changera pas:

Grid.Rows(0).Selected = True

Faites ceci changer la position du curseur:

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

La combinaison des lignes ci-dessus positionnera le curseur et sélectionnera une ligne. Voici la procédure standard pour la mise au point et la sélection d'une ligne dans un DataGridView:

Grid.CurrentCell = Grid.Rows(0).Cells(0)
Grid.Rows(0).Selected = True
Rodrigo T.
la source
Grid.Rows (0) .Cells (0) est très utile dans le cas de données de grille plus longues que la zone d'affichage de la grille. L'ordre mentionné ci-dessus n'est pas nécessaire, vous pouvez faire glisser le code pour la sélection de ligne / cellule [source: personnellement testé].
BiLaL
Comment déplacer la grille vers la position sélectionnée? La ligne est sélectionnée mais la position de la grille n'est pas sur la ligne sélectionnée. Le défilement manuel montre la ligne sélectionnée. Comment forcer la grille à défiler?
FrenkyB
Voir ça: FirstDisplayedScrollingRowIndex
Rodrigo T.
12
DataGridView.Rows
    .OfType<DataGridViewRow>()
     .Where(x => (int)x.Cells["Id"].Value == pId)
     .ToArray<DataGridViewRow>()[0]
     .Selected = true;
IM999MaxBonum
la source
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. Efface toutes les sélections précédentes.
  2. Boucle à travers les lignes devant être sélectionnées dans votre grille.
  3. Obtenez leurs poignées de ligne de la grille (Notez ici que la grille est déjà mise à jour avec de nouvelles lignes)
  4. Vérifier si la poignée de ligne est valide ou non.
  5. Lorsque la poignée de ligne est valide, sélectionnez-la.

Où itemList est la liste des lignes à sélectionner dans la vue en grille.

IFlyHigh
la source
0

Essaye ça:

datagridview.Rows[currentRow].Cells[0];
Ganesh Kamath - 'Code Frenzy'
la source
datagridview.Rows[currentRow].Cells[0] Obtient ... la cellule à l'emplacement d'index fourni. Comment cela sélectionne- t-il une plage particulière de lignes comme demandé dans la question?
dbc
-1

Lors de la définition d'une ligne sélectionnée d'un DataGridView au moment du chargement, envisagez de gérer cela dans l'événement DataBindingComplete, car il peut être remplacé par défaut.

Daniel Ohm
la source
-1

Essaye ça:

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

J'espère que cette aide!

lecntp
la source