Chỉ mục của hàng hiện được chọn trong DataGridView


96

Nó đơn giản mà. Làm thế nào để tôi có được chỉ số của hiện đang được chọn Rowcủa một DataGridView? Tôi không muốn Rowđối tượng, tôi muốn chỉ mục (0 .. n).

Câu trả lời:


165

Có thuộc RowIndextính cho thuộc CurrentCelltính cho DataGridView.

datagridview.CurrentCell.RowIndex

Xử lý SelectionChangedsự kiện và tìm chỉ số của hàng đã chọn như trên.


1
Hoàn hảo. Điều này có vẻ đơn giản nhất / nhanh nhất, thậm chí hơn SelectedRows [0] .Index. Đó sẽ là một giả định tốt?
ErikE

Rất tiếc, tôi không nghĩ đến việc nhiều hàng được chọn. Tôi không chắc chắn về hoạt động của ô hiện tại trong trường hợp này.
fletcher

1
Nếu đó là bất kỳ thứ gì giống như Excel, danh sách đã chọn có thể gồm nhiều hàng / cột, nhưng chỉ có một ô hiện tại / đang hoạt động. Tôi chỉ quan tâm đến hàng hiện tại nên điều này sẽ ổn.
ErikE

18
Tôi biết bài đăng này đã cũ, nhưng nó có thể giúp ích cho người khác: CurrentCelltrả về ô "đang hoạt động", khác với ô "Đã chọn". Ngay cả khi có nhiều hàng được lựa chọn, các tế bào hoạt động có thể là ở một nơi khác, và có thể chỉ có một hoạt động tế bào
Luke Marlin

3
Ngoài ra, ngay cả khi bạn bỏ chọn mọi thứ trong chế độ xem lưới dữ liệu, một trong các ô sẽ vẫn hoạt động, vì vậy bạn không thể tin rằng ô này là rỗng hoặc tương tự vì không có hàng nào được chọn.
Daniel Grey

37

Sử dụng thuộc tính Index trong bộ sưu tập DGV's SelectedRows của bạn:

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

Bạn nghĩ điều này tốt hơn hay DGV.CurrentCell.RowIndex?
ErikE

4
Ô hiện tại có thể không được chọn trong một số trường hợp, vì vậy đây là cách tốt hơn để thực hiện.
Little Endian

1
@thethuthinnang khi bạn đã chọn không có hàng nào, giải pháp của @JayRiggs sẽ ném ra lỗi chỉ mục hai. Bạn nên bọc nó với mộtif
Allan Ruin

7
dataGridView1.SelectedRows[0].Index;

Hoặc nếu bạn muốn sử dụng LINQ và lấy chỉ mục của tất cả các hàng đã chọn, bạn có thể làm:

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

Hữu ích (IndexOf vẫn chưa thực sự "nằm trong tầm ngắm của tôi"), nhưng việc đi vòng quanh vì nhận được hàng là không cần thiết. Phương thức .Index là những gì tôi đang tìm kiếm.
ErikE


3

hãy thử nó sẽ hoạt động ... nó sẽ cung cấp cho bạn chỉ mục của chỉ mục hàng đã chọn ...

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

2

thử cái này

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
}

Cảm ơn, chính xác những gì tôi cần để xác định giá trị ẩn của hàng đã chọn khi sử dụng điều khiển không được liên kết với chế độ xem lưới.
orgtigger

2

Tôi đã sửa đổi câu trả lời của @JayRiggs và điều này hoạt động. Bạn cần ifvì đôi khi dòng Selected có thể trống, vì vậy thao tác lập chỉ mục sẽ đưa ra một ngoại lệ.

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

1

Hãy thử DataGridView.CurrentCellAddress .

Trả về: Một Điểm đại diện cho các chỉ số hàng và cột của ô hiện đang hoạt động.

EG Chọn cột đầu tiên và hàng thứ năm, và bạn sẽ nhận lại: Point (X = 1, Y = 5)


Tái bút vì tôi đã yêu cầu chỉ mục hàng, mọi thứ sẽ ít trở nên DataGridView.CurrentCellAddress.Y
tồi tệ

Tôi nghĩ tại thời điểm này, tất cả các câu trả lời này đều hợp lệ, bạn muốn chọn câu trả lời nào sạch nhất cho mục đích của mình tùy thuộc vào bạn. Tôi khuyên bạn nên nhập các cách triển khai khác nhau và xem IL trong .NET Reflector ( red-gate.com/products/reflector ) nếu bạn thực sự muốn xem mã nào được tạo cho từng loại, nhưng nhiều người sẽ nói, đó là vi -tối ưu hóa. Nó thực sự phụ thuộc vào những gì rõ ràng nhất trong ý định. PS Lưu ý được thực hiện để rõ ràng hơn trong tương lai.
Kilanash

1

Thử nó:

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

Tôi hy vọng nó sẽ giúp bạn.


3
Cảm ơn bạn đã tham gia, nhưng câu trả lời của bạn trùng lặp với câu trả lời đã chọn (và được ủng hộ nhiều nhất) đã đưa ra giải pháp datagridview.CurrentCell.RowIndex. Lời xin lỗi của tôi — Tôi khuyên bạn nên xóa bài đăng này như một bản sao hoàn toàn.
ErikE

0

Bạn có thể thử mã này:

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

0

Tôi đã sử dụng nếu nhận được giá trị hàng được nhấp:

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

Hãy thử những cách sau:

int myIndex = MyDataGrid.SelectedIndex;

Điều này sẽ cung cấp chỉ mục của hàng hiện đang được chọn.

Hi vọng điêu nay co ich

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.