Indeks Baris yang Saat Ini Dipilih di DataGridView

96

Sesederhana itu. Bagaimana cara mendapatkan indeks yang saat ini dipilih Rowdari a DataGridView? Saya tidak ingin Rowobjeknya, saya ingin indeks (0 .. n).

ErikE
sumber

Jawaban:

165

Ada RowIndexproperti untuk CurrentCellproperti untuk DataGridView.

datagridview.CurrentCell.RowIndex

Tangani SelectionChangedacara tersebut dan temukan indeks dari baris yang dipilih seperti di atas.

Pembuat panah
sumber
1
Sempurna. Ini tampaknya paling sederhana / tercepat, bahkan di atas SelectedRows [0]. Indeks. Apakah itu asumsi yang bagus?
ErikE
Hmm, saya tidak berpikir tentang beberapa baris yang dipilih. Saya tidak yakin dengan perilaku sel saat ini dalam kasus ini.
fletcher
1
Jika seperti Excel, daftar yang dipilih bisa banyak baris / kolom, tetapi hanya ada satu sel saat ini / aktif. Saya hanya peduli dengan baris saat ini jadi ini akan berfungsi dengan baik.
ErikE
18
Saya tahu posting ini sudah lama, tetapi mungkin membantu orang lain: CurrentCellmengembalikan sel "aktif", yang berbeda dari "Dipilih". Bahkan jika ada beberapa baris yang dipilih, sel aktif mungkin berada di tempat lain, dan hanya ada satu sel aktif
Luke Marlin
3
Dan juga, bahkan jika Anda membatalkan pilihan semuanya dalam tampilan kisi data, salah satu sel akan tetap aktif, jadi Anda tidak dapat mengandalkan ini sebagai null atau semacamnya karena tidak ada baris yang dipilih.
Daniel Gray
37

Gunakan properti Indeks di koleksi SelectedRows DGV Anda:

int index = yourDGV.SelectedRows[0].Index;
Jay Riggs
sumber
Apakah menurut Anda ini lebih baik atau DGV.CurrentCell.RowIndex?
ErikE
4
Sel saat ini mungkin tidak dipilih dalam beberapa kasus, jadi ini cara yang lebih baik.
Little Endian
1
@thethuthinnang ketika Anda tidak memilih baris, solusi @JayRiggs akan menampilkan kesalahan indeks dua. Anda sebaiknya membungkusnya denganif
Allan Ruin
7
dataGridView1.SelectedRows[0].Index;

Atau jika Anda ingin menggunakan LINQ dan mendapatkan indeks dari semua baris yang dipilih, Anda dapat melakukan:

dataGridView1.SelectedRows.Select(r => r.Index);
Justin Niessner
sumber
Bermanfaat (IndexOf belum benar-benar "ada di radar saya"), tapi tidak perlu memutar karena mendapatkan baris tersebut. Metode .Index adalah apa yang saya cari.
ErikE
6
dataGridView1.SelectedRows[0].Index;

Di sini temukan semua tentang datagridview C # datagridview tutorial

Lynda

Lyndaeldo
sumber
3

coba ini akan berhasil ... ini akan memberi Anda indeks dari indeks baris yang dipilih ...

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

coba ini

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
}
HyperNova
sumber
Terima kasih, apa yang saya butuhkan untuk menentukan apa nilai tersembunyi dari baris yang dipilih saat menggunakan kontrol yang tidak terkait dengan tampilan kisi.
orgtigger
2

Saya mengubah jawaban @JayRiggs, dan ini berhasil. Anda memerlukannya ifkarena terkadang SelectedRows mungkin kosong, sehingga operasi indeks akan mengeluarkan pengecualian.

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

Coba DataGridView.CurrentCellAddress .

Mengembalikan: Titik yang mewakili indeks baris dan kolom dari sel yang sedang aktif.

EG Pilih kolom pertama dan baris kelima, dan Anda akan kembali: Point (X = 1, Y = 5)

Kilanash
sumber
PS sejak saya meminta indeks baris, hal-hal akan menjadi kurang berbatu dalam hubungan kita jika Anda mengatakan DataGridView.CurrentCellAddress.Y... :)
ErikE
Saya pikir pada titik ini semua jawaban ini valid, terserah Anda mana yang ingin Anda pilih yang paling bersih untuk tujuan Anda. Saya sarankan untuk mengetik penerapan yang berbeda dan melihat IL di .NET Reflector ( red-gate.com/products/reflector ) jika Anda benar-benar ingin melihat kode apa yang dihasilkan untuk masing-masing, tetapi seperti yang akan dikatakan banyak orang, itu mikro -pengoptimalan. Ini benar-benar tergantung pada niat yang paling jelas. Catatan PS diambil agar lebih jelas di masa depan.
Kilanash
1

Cobalah:

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

Saya harap ini akan membantu Anda.

Raaz Salyani
sumber
3
Terima kasih telah menyumbang, tetapi jawaban Anda adalah duplikat dari jawaban yang dipilih (dan paling banyak disukai) yang memberikan solusi datagridview.CurrentCell.RowIndex. Maafkan saya — Saya akan merekomendasikan agar posting ini dihapus sebagai duplikat penuh.
ErikE
0

Anda dapat mencoba kode ini:

int columnIndex = dataGridView.CurrentCell.ColumnIndex;
int rowIndex = dataGridView.CurrentCell.RowIndex;
subhankar
sumber
0

Saya menggunakan jika mendapatkan nilai baris diklik:

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
}
Han Nguyen
sumber
-1

Coba yang berikut ini:

int myIndex = MyDataGrid.SelectedIndex;

Ini akan memberikan indeks baris yang saat ini dipilih.

Semoga ini membantu

P_Fitz
sumber