DataGridView'da Şu Anda Seçili Satır Dizini


96

Bu kadar basit. Şu anda seçili Rowolan a'nın dizinini nasıl alırım DataGridView? İstemediğim Rowben endeksi (0 .. n) istiyorum, nesneyi.

Yanıtlar:


165

Orada RowIndexmülk CurrentCellDataGridView için mülkiyet.

datagridview.CurrentCell.RowIndex

SelectionChangedOlayı işleyin ve seçilen satırın dizinini yukarıdaki gibi bulun.


1
Mükemmel. Bu, SelectedRows [0] .Index üzerinde bile en basit / en hızlı görünüyor. Bu iyi bir varsayım olur mu?
— ErikE

Hmm, birden fazla satırın seçildiğini düşünmedim. Bu durumda mevcut hücrenin davranışından emin değilim.
— fletcher

1
Excel gibi bir şeyse, seçilen liste birçok satır / sütun olabilir, ancak yalnızca bir geçerli / etkin hücre vardır. Sadece şu anki satırı önemsiyorum, bu yüzden bu iyi olmalı.
— ErikE

18
Bu gönderinin eski olduğunu biliyorum, ancak başka birine yardımcı olabilir: CurrentCell"Seçili" den farklı olan "etkin" hücreyi döndürür. Birden fazla satır seçilse bile, aktif hücre başka bir yerde olabilir ve yalnızca bir aktif hücre olabilir
— Luke Marlin

3
Ayrıca, veri ızgarası görünümündeki her şeyin seçimini kaldırsanız bile, hücrelerden biri hala aktif olacaktır, bu nedenle, bunun boş olduğuna veya buna benzer bir satırın seçili olmamasına güvenemezsiniz.
— Daniel Gray

37

DGV'nizin SelectedRows koleksiyonunda Index özelliğini kullanın:

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

Bunun daha iyi olduğunu mu düşünüyorsunuz yoksa DGV.CurrentCell.RowIndex?
— ErikE

4
Mevcut hücre bazı durumlarda seçilemeyebilir, bu nedenle bu daha iyi bir yoldur.
— Little Endian

1
@thethuthinnang hiçbir satır seçmediğinizde, @JayRiggs'in çözümü ikinci dizin hatası atar. Onu birif
— Allan Ruin ile

7
dataGridView1.SelectedRows[0].Index;

Veya LINQ kullanmak ve seçilen tüm satırların dizinini almak isterseniz, şunları yapabilirsiniz:

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

Yararlı (IndexOf henüz gerçekten "benim radarımda" değildi), ancak sırayı almak gerekli olmadığından dolambaçlı. .Index yöntemi aradığım şeydi.
— ErikE


3

bunu deneyin, işe yarayacak ... size seçilen satır dizininin dizinini verecektir ...

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

2

bunu dene

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
}

Teşekkürler, gridview ile ilişkili olmayan bir kontrolü kullanırken seçilen bir satırın gizli değerinin ne olduğunu belirlemek için tam olarak ihtiyacım olan şey.
— orgtigger

2

@JayRiggs'in cevabını değiştirdim ve bu işe yarıyor. İhtiyacınız ifbazen SelectedRows boş olabilir çünkü indeks işlemi özel durum oluşturur, böylece.

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

1

DataGridView.CurrentCellAddress'i deneyin .

Döndürür: Şu anda etkin olan hücrenin satır ve sütun dizinlerini temsil eden bir nokta.

EG İlk sütunu ve beşinci satırı seçin ve geri döneceksiniz: Nokta (X = 1, Y = 5)


Not: Satır endeksini sorduğumdan beri ilişkimizde işler daha az DataGridView.CurrentCellAddress.Y
— çalkantılı

Sanırım bu noktada tüm bu cevaplar geçerli, amacınız için en temiz olanı seçmek istediğiniz sadece size kalmış. Her biri için hangi kodun üretildiğini gerçekten görmek istiyorsanız , farklı uygulamaları yazmanızı ve IL'ye .NET Reflector'da ( red-gate.com/products/reflector ) bakmanızı öneririm , ancak çoğu kişi söyleyeceği gibi, bu mikro -optimizasyon. Gerçekten niyetin en açık olanına bağlı. Gelecekte daha net olacak şekilde alınan PS Notu.
— Kilanash

1

Dene:

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

Umarım bu sana yardımcı olur.


3
Katıldığınız için teşekkürler, ancak cevabınız, çözümü sağlayan seçili (ve en çok oy verilen cevap) bir kopyası datagridview.CurrentCell.RowIndex. Özür dilerim - Bu gönderinin tam kopya olarak silinmesini tavsiye edeceğim.
— ErikE

0

Bu kodu deneyebilirsiniz:

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

0

Satır değeri al tıklanırsa kullandım:

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

Takip etmeyi dene:

int myIndex = MyDataGrid.SelectedIndex;

Bu, şu anda seçili olan satırın dizinini verecektir.

Bu yardımcı olur umarım

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.