Index der aktuell ausgewählten Zeile in DataGridView


96

So einfach ist das. Wie erhalte ich den Index der aktuell ausgewählten Rowvon a DataGridView? Ich möchte das RowObjekt nicht, ich möchte den Index (0 .. n).

Antworten:


165

Es gibt die RowIndexEigenschaft für die CurrentCellEigenschaft für DataGridView.

datagridview.CurrentCell.RowIndex

Behandeln Sie das SelectionChangedEreignis und suchen Sie den Index der ausgewählten Zeile wie oben.


1
Perfekt. Dies scheint am einfachsten / schnellsten zu sein, selbst über SelectedRows [0] .Index. Wäre das eine gute Annahme?
ErikE

Hmm, ich habe nicht daran gedacht, dass mehrere Zeilen ausgewählt werden. Ich bin mir nicht sicher, wie sich die aktuelle Zelle in diesem Fall verhält.
Fletcher

1
Wenn es sich um Excel handelt, kann die ausgewählte Liste viele Zeilen / Spalten enthalten, es gibt jedoch nur eine aktuelle / aktive Zelle. Ich kümmere mich nur um die aktuelle Zeile, daher sollte dies in Ordnung sein.
ErikE

18
Ich weiß, dass dieser Beitrag alt ist, aber er könnte jemand anderem helfen: CurrentCellGibt die "aktive" Zelle zurück, die sich von "Ausgewählt" unterscheidet. Selbst wenn mehrere Zeilen ausgewählt sind, befindet sich die aktive Zelle möglicherweise an einer anderen Stelle, und es kann nur eine aktive Zelle geben
Luke Marlin,

3
Selbst wenn Sie alles in der Datenrasteransicht abwählen, ist eine der Zellen weiterhin aktiv, sodass Sie sich nicht darauf verlassen können, dass dies null oder ähnliches ist, da keine Zeilen ausgewählt sind.
Daniel Gray

37

Verwenden Sie die Index-Eigenschaft in der SelectedRows-Sammlung Ihres DGV:

int index = yourDGV.SelectedRows[0].Index;

Denken Sie, dass dies besser ist oder DGV.CurrentCell.RowIndex?
ErikE

4
In einigen Fällen wird die aktuelle Zelle möglicherweise nicht ausgewählt, daher ist dies der bessere Weg.
Little Endian

1
@thethuthinnang Wenn Sie keine Zeile ausgewählt haben, löst die Lösung von @JayRiggs den Indexfehler zwei aus. Du solltest es besser mit einemif
Allan Ruin

7
dataGridView1.SelectedRows[0].Index;

Wenn Sie LINQ verwenden und den Index aller ausgewählten Zeilen abrufen möchten, haben Sie folgende Möglichkeiten:

dataGridView1.SelectedRows.Select(r => r.Index);

Hilfreich (IndexOf war noch nicht wirklich "auf meinem Radar"), aber ein Kreisverkehr, da das Abrufen der Zeile nicht erforderlich ist. Die .Index-Methode ist das, wonach ich gesucht habe.
ErikE


3

Versuchen Sie dies, es wird funktionieren ... es gibt Ihnen den Index des ausgewählten Zeilenindex ...

int rowindex = dataGridView1.CurrentRow.Index;
MessageBox.Show(rowindex.ToString());

2

Versuche dies

bool flag = dg1.CurrentRow.Selected;

if(flag)
{
  /// datagridview  row  is  selected in datagridview rowselect selection mode

}
else
{
  /// no  row is selected or last empty row is selected
}

Vielen Dank, genau das, was ich brauchte, um den versteckten Wert einer ausgewählten Zeile zu bestimmen, wenn ich ein Steuerelement verwendete, das nicht mit der Rasteransicht verknüpft war.
Orgtigger

2

Ich habe die Antwort von @JayRiggs geändert, und das funktioniert. Sie benötigen das, ifda die SelectedRows manchmal leer sind, sodass die Indexoperation eine Ausnahme auslöst.

if (yourDGV.SelectedRows.Count>0){
    int index = yourDGV.SelectedRows[0].Index;
}

1

Versuchen Sie es mit DataGridView.CurrentCellAddress .

Rückgabe: Ein Punkt, der die Zeilen- und Spaltenindizes der aktuell aktiven Zelle darstellt.

EG Wählen Sie die erste Spalte und die fünfte Zeile aus und Sie erhalten zurück: Punkt (X = 1, Y = 5)


PS, seit ich nach dem Zeilenindex gefragt habe, wären die Dinge in unserer Beziehung weniger DataGridView.CurrentCellAddress.Y
schwierig gewesen,

Ich denke, an diesem Punkt sind alle diese Antworten gültig. Es liegt nur an Ihnen, welche Sie auswählen möchten, die für Ihre Zwecke am saubersten ist. Ich würde vorschlagen, die verschiedenen Implementierungen einzugeben und die IL in .NET Reflector ( red-gate.com/products/reflector ) zu betrachten, wenn Sie wirklich sehen möchten, welcher Code für jede Implementierung generiert wird, aber wie viele sagen werden, ist das Mikro -Optimierung. Es kommt wirklich darauf an, was in der Absicht am klarsten ist. PS Hinweis wird in Zukunft klarer.
Kilanash

1

Versuch es:

int rc=dgvDataRc.CurrentCell.RowIndex;** //for find the row index number
MessageBox.Show("Current Row Index is = " + rc.ToString());

Ich hoffe es hilft dir.


3
Vielen Dank, dass Sie sich angemeldet haben, aber Ihre Antwort ist ein Duplikat der ausgewählten (und am besten bewerteten) Antwort, die die Lösung geliefert hat datagridview.CurrentCell.RowIndex. Ich entschuldige mich - ich werde empfehlen, diesen Beitrag als vollständiges Duplikat zu löschen.
ErikE

0

Sie können diesen Code ausprobieren:

int columnIndex = dataGridView.CurrentCell.ColumnIndex;
int rowIndex = dataGridView.CurrentCell.RowIndex;

0

Ich habe verwendet, wenn auf Zeilenwert abrufen geklickt wird:

private void dataGridView_Product_CellClick(object sender, DataGridViewCellEventArgs e){
    int rowIndex;
    //rowIndex = e.RowIndex; //Option 1
    //rowIndex= dataGridView_Product.CurrentCell.RowIndex; //Option 2
    rowIndex = dataGridView_Product.CurrentRow.Index; //Option 3
}

-1

Versuche Folgendes:

int myIndex = MyDataGrid.SelectedIndex;

Dies gibt den Index der aktuell ausgewählten Zeile an.

Hoffe das hilft

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.