DataGridView에서 현재 선택된 행의 인덱스


96

그렇게 간단합니다. 현재 선택된 Row의 색인은 어떻게 얻 DataGridView습니까? 나는 Row객체를 원하지 않고 인덱스 (0 .. n)를 원한다.

답변:


165

DataGridView 의 RowIndex속성에 대한 CurrentCell속성이 있습니다.

datagridview.CurrentCell.RowIndex

SelectionChanged위와 같이 이벤트를 처리하고 선택한 행의 인덱스를 찾습니다.


1
완전한. 이것은 SelectedRows [0] .Index를 통해서도 가장 간단하고 빠릅니다. 좋은 가정일까요?
ErikE

흠, 여러 행이 선택 될 것이라고 생각하지 않았습니다. 이 경우 현재 셀의 동작을 잘 모르겠습니다.
fletcher 2010-08-26

1
Excel과 같은 경우 선택한 목록은 여러 행 / 열이 될 수 있지만 현재 / 활성 셀은 하나뿐입니다. 나는 현재 행에만 관심이 있으므로 잘해야합니다.
ErikE 2010-08-26

18
이 게시물이 오래되었다는 것을 알고 있지만 다른 사람에게 도움이 될 수 있습니다 CurrentCell. "선택됨"과 다른 "활성"셀을 반환합니다. 여러 행이 선택이있다하더라도, 현재 셀은 다른 곳이 될 수도 있고, 단 하나의 활성 셀이있을 수있다
누가 복음 말린

3
또한 데이터 그리드보기에서 모든 항목을 선택 취소하더라도 셀 중 하나는 여전히 활성화되어 있으므로 선택된 행이 없기 때문에 null 또는 이와 비슷한 것으로 믿을 수 없습니다.
Daniel Gray

37

DGV의 SelectedRows 컬렉션에서 Index 속성을 사용합니다.

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

이것이 더 낫다고 생각합니까 아니면 DGV.CurrentCell.RowIndex?
ErikE 2010-08-26

4
경우에 따라 현재 셀이 선택되지 않을 수 있으므로 이것이 더 좋은 방법입니다.
Little Endian 2014

1
행을 선택하지 않은 경우 @thethuthinnang, @JayRiggs의 솔루션은 인덱스 오류 2를 발생시킵니다. 당신은 더 나은 그것을 포장 것if
앨런 망치

7
dataGridView1.SelectedRows[0].Index;

또는 LINQ를 사용하고 선택한 모든 행의 인덱스를 얻으려면 다음을 수행 할 수 있습니다.

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

도움이되지만 (IndexOf는 아직 "내 레이더에"있지 않았습니다), 행을 얻을 필요가 없기 때문에 로터리. .Index 메서드는 내가 찾던 것입니다.
ErikE


3

이것을 시도하면 작동합니다 ... 선택한 행 색인의 색인을 제공합니다 ...

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

2

이 시도

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
}

감사합니다. gridview와 연결되지 않은 컨트롤을 사용할 때 선택한 행의 숨겨진 값을 결정하는 데 정확히 필요한 것입니다.
orgtigger 2014 년

2

@JayRiggs의 대답을 수정했는데 이것이 작동합니다. if때때로 SelectedRows가 비어있을 수 있으므로 인덱스 작업에서 예외가 발생하기 때문에 필요합니다 .

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

1

DataGridView.CurrentCellAddress를 사용해보십시오 .

반환 값 : 현재 활성 셀의 행 및 열 인덱스를 나타내는 Point.

EG 첫 번째 열과 다섯 번째 행을 선택하면 다음으로 돌아갑니다. Point (X = 1, Y = 5)


추신 : 내가 행 인덱스를 요청한 이후로, 만약 당신이 말했 더라면 우리 관계에서 상황이 덜 DataGridView.CurrentCellAddress.Y
불안정

나는이 시점에서이 모든 대답이 유효하다고 생각합니다. 당신의 목적에 가장 깨끗한 것을 선택하고 싶은 것은 당신에게 달려 있습니다. 각각에 대해 어떤 코드가 생성되는지 실제로보고 싶다면 다른 구현을 입력하고 .NET Reflector ( red-gate.com/products/reflector ) 에서 IL을 살펴 보는 것이 좋습니다. -최적화. 의도가 가장 명확한 것에 달려 있습니다. PS Note는 앞으로 더 명확해질 것입니다.
Kilanash 2010-08-26

1

시도 해봐:

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

도움이 되길 바랍니다.


3
입력 해 주셔서 감사합니다.하지만 귀하의 답변은 솔루션을 제공 한 선택된 (그리고 가장 많이 찬성 된 답변)의 중복입니다 datagridview.CurrentCell.RowIndex. 죄송합니다.이 게시물을 전체 중복으로 삭제하는 것이 좋습니다.
ErikE 2015

0

이 코드를 시도해 볼 수 있습니다.

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

0

행 값 가져 오기를 클릭하면 사용했습니다.

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

다음을 시도하십시오.

int myIndex = MyDataGrid.SelectedIndex;

이것은 현재 선택된 행의 인덱스를 제공합니다.

도움이 되었기를 바랍니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.