Programmgesteuertes Auswählen einer Zeile in DataGridView

107

Wie kann ich DataGridViewzur Laufzeit programmgesteuert einen bestimmten Zeilenbereich auswählen ?

Nagendra
quelle

Antworten:

125

Nicht getestet, aber ich denke, Sie können Folgendes tun:

dataGrid.Rows[index].Selected = true;

oder Sie könnten Folgendes tun (aber noch einmal: nicht getestet):

dataGrid.SelectedRows.Clear();
foreach(DataGridViewRow row in dataGrid.Rows)
{
    if(YOUR CONDITION)
       row.Selected = true;
}
Christoph Fink
quelle
Passen Sie auf, ob Ihr DataGridView ist read-only- dann SelectedRows.Clear()funktioniert es nicht.
Derek W
14
Verwenden Sie anstelle von SelectedRows.Clear () die ClearSelection () -Methode der Datagridview-Instanz
Furkan,
1
@ Furkan: Das macht nicht das Gleiche. Mit SelectedRows.Clear()nur die ausgewählten Zeilen gelöscht, aber mit ClearSelection()auch den Spalten => Spaltenauswahlen verloren ...
Christoph Fink
17
dataGrid.CurrentCell = dataGrid.Rows[row.Index].Cells[0];
Timeless
2
@Timeless: Das SelectionChanged-Ereignis scheint beim Testen Ihres Vorschlags nicht ausgelöst zu werden.
user2430797
33

Führen Sie dies in Visual Basic aus, um eine Zeile in a auszuwählen DataGridView. Die ausgewählte Zeile wird mit einer hervorgehobenen Farbe angezeigt. Beachten Sie jedoch, dass sich die Cursorposition nicht ändert:

Grid.Rows(0).Selected = True

Ändern Sie dazu die Position des Cursors:

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

Durch Kombinieren der obigen Zeilen wird der Cursor positioniert und eine Zeile ausgewählt. Dies ist das Standardverfahren zum Fokussieren und Auswählen einer Zeile in a DataGridView:

Grid.CurrentCell = Grid.Rows(0).Cells(0)
Grid.Rows(0).Selected = True
Rodrigo T.
quelle
Grid.Rows (0) .Cells (0) ist sehr nützlich, wenn Grid-Daten länger als der Rasteranzeigebereich sind. Die oben genannte Reihenfolge ist nicht erforderlich. Sie können den Code für die Zeilen- / Zellenauswahl durchwischen [Quelle: Persönlich getestet].
BiLaL
Wie verschiebe ich das Gitter an die ausgewählte Position? Zeile ist ausgewählt, aber die Rasterposition befindet sich nicht in der ausgewählten Zeile. Manuelles Scrollen zeigt die ausgewählte Zeile. Wie erzwinge ich das Scrollen zum Scrollen?
FrenkyB
Siehe das: FirstDisplayedScrollingRowIndex
Rodrigo T.
12
DataGridView.Rows
    .OfType<DataGridViewRow>()
     .Where(x => (int)x.Cells["Id"].Value == pId)
     .ToArray<DataGridViewRow>()[0]
     .Selected = true;
IM999MaxBonum
quelle
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. Löschen Sie alle vorherigen Auswahlen.
  2. Durchlaufen von Zeilen, die in Ihrem Raster ausgewählt werden mussten.
  3. Holen Sie sich ihre Zeilenhandles aus dem Raster (Beachten Sie, dass das Raster bereits mit neuen Zeilen aktualisiert wurde)
  4. Überprüfen, ob das Zeilenhandle gültig ist oder nicht.
  5. Wenn ein gültiges Zeilenhandle vorliegt, wählen Sie es aus.

Dabei ist itemList eine Liste der Zeilen, die in der Rasteransicht ausgewählt werden sollen.

IFlyHigh
quelle
0

Versuche dies:

datagridview.Rows[currentRow].Cells[0];
Ganesh Kamath - "Code Frenzy"
quelle
datagridview.Rows[currentRow].Cells[0] Ruft ... die Zelle an der angegebenen Indexposition ab. Wie wählt dies einen bestimmten Zeilenbereich aus, wie in der Frage gefordert?
dbc
-1

Wenn Sie zum Zeitpunkt des Ladens eine ausgewählte Zeile einer DataGridView festlegen, sollten Sie dies im DataBindingComplete-Ereignis behandeln, da diese standardmäßig überschrieben werden kann.

Daniel Ohm
quelle
-1

Versuche dies:

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

Ich hoffe das hilft!

lecntp
quelle