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.