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).

Jawaban:


165

Ada RowIndexproperti untuk CurrentCellproperti untuk DataGridView.

datagridview.CurrentCell.RowIndex

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


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;

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);

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


3

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

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

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
}

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;
}

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)


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.


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;

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
}

-1

Coba yang berikut ini:

int myIndex = MyDataGrid.SelectedIndex;

Ini akan memberikan indeks baris yang saat ini dipilih.

Semoga ini membantu

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.