Programowe wybieranie wiersza w DataGridView

109

Jak mogę wybrać konkretny zakres wierszy w DataGridViewprogramie w czasie wykonywania?

Nagendra
źródło

Odpowiedzi:

127

Nie testowane, ale myślę, że możesz wykonać następujące czynności:

dataGrid.Rows[index].Selected = true;

lub możesz wykonać następujące czynności (ale znowu: nie testowane):

dataGrid.SelectedRows.Clear();
foreach(DataGridViewRow row in dataGrid.Rows)
{
    if(YOUR CONDITION)
       row.Selected = true;
}
Christoph Fink
źródło
Uważaj, jeśli Twój DataGridView jest read-only- to SelectedRows.Clear()nie będzie działać.
Derek W
14
Zamiast SelectedRows.Clear () użyj metody ClearSelection () instancji datagridview
Furkan
1
@Furkan: To nie robi tego samego. Gdy SelectedRows.Clear()tylko zaznaczone wiersze zostaną wyczyszczone, ale ClearSelection()także z kolumnami => zaznaczenia kolumn zostaną utracone ...
Christoph Fink
17
dodaj jedną linię kodudataGrid.CurrentCell = dataGrid.Rows[row.Index].Cells[0];
Timeless
2
@Timeless: zdarzenie SelectionChanged nie wydaje się być wyzwalane podczas testowania Twojej sugestii.
user2430797
34

W Visual Basic zrób to, aby wybrać wiersz w DataGridView; wybrany wiersz pojawi się z podświetlonym kolorem, ale zwróć uwagę, że pozycja kursora nie zmieni się:

Grid.Rows(0).Selected = True

Zrób to, aby zmienić położenie kursora:

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

Połączenie powyższych linii spowoduje umieszczenie kursora i wybranie wiersza. Oto standardowa procedura ustawiania ostrości i wybierania wiersza w DataGridView:

Grid.CurrentCell = Grid.Rows(0).Cells(0)
Grid.Rows(0).Selected = True
Rodrigo T.
źródło
Grid.Rows (0) .Cells (0) jest bardzo przydatne w przypadku danych siatki dłuższych niż obszar wyświetlania siatki. Powyższa kolejność nie jest konieczna, możesz przesunąć kod do wyboru wiersza / komórki [źródło: osobiście przetestowane].
BiLaL
Jak przesunąć siatkę do wybranej pozycji? Wiersz jest zaznaczony, ale pozycja siatki nie jest w wybranym wierszu. Ręczne przewijanie pokazuje wybrany wiersz. Jak wymusić przewijanie siatki?
FrenkyB
Zobacz: FirstDisplayedScrollingRowIndex
Rodrigo T.
12
DataGridView.Rows
    .OfType<DataGridViewRow>()
     .Where(x => (int)x.Cells["Id"].Value == pId)
     .ToArray<DataGridViewRow>()[0]
     .Selected = true;
IM999MaxBonum
źródło
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. Wyczyść wszystkie poprzednie zaznaczenia.
  2. Zapętlaj wiersze, które należy wybrać w siatce.
  3. Pobierz uchwyty wierszy z siatki (uwaga tutaj siatka jest już zaktualizowana o nowe wiersze)
  4. Sprawdzanie, czy uchwyt wiersza jest prawidłowy, czy nie.
  5. Gdy prawidłowy uchwyt wiersza, wybierz go.

Gdzie itemList jest listą wierszy do wybrania w widoku siatki.

IFlyHigh
źródło
0

Spróbuj tego:

datagridview.Rows[currentRow].Cells[0];
Ganesh Kamath - „Code Frenzy”
źródło
datagridview.Rows[currentRow].Cells[0] Pobiera ... komórkę w podanej lokalizacji indeksu. W jaki sposób powoduje to wybranie określonego zakresu wierszy zgodnie z żądaniem w pytaniu?
dbc
-1

Podczas ustawiania Selected wiersz DataGridView w czasie ładowania należy rozważyć obsługę tego w zdarzeniu DataBindingComplete, ponieważ może on zostać zastąpiony domyślnie.

Daniel Ohm
źródło
-1

Spróbuj tego:

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

Mam nadzieję, że to pomoże!

lecntp
źródło