2009-11-04 6 views
5

"셀을 선택한 행의 인덱스"를 반환하도록 DataGridView에 묻는 가장 깨끗한 방법은 무엇입니까? 이것은 DataGridView.SelectedRows와 다릅니다. 행 또는 열 선택을 허용하지 않습니다. 따라서 사용자는 셀 블록을 선택해야합니다. 난 단지 어떤 행이 셀을 선택했는지 알아야합니다.DataGridView 및 SelectedCells - 선택한 셀의 행 인덱스 찾기

내가 사용해야 할 영리한 람다 표현식이 있습니까? 무엇을 하시겠습니까?

도움이된다면 : 나는 이미있는 DataGridView에서 상속하고 난 내 자신의 사용자 정의 클래스 DataGridViewExt에있어 쓰고 있어요 코드에서.

+0

내 기분이. – BuddyJoe

+0

해야할까요? 할 수 있어요? –

+0

다른 사람이이 코드베이스를 지금부터 1 년 후 지원할 것이라는 의미에서 ... 3 번째에서 5 번째가 아니라 1 번째 라인에서 의도를 설명 할 수 있다면이 프로젝트에 도움이 될 것입니다. – BuddyJoe

답변

9

LINQ 솔루션 :

var rowIndexes = dgv.SelectedCells.Cast<DataGridViewCell>() 
            .Select(cell => cell.RowIndex) 
            .Distinct(); 

편집 :

당신은 단지 캐스트 누락되었다. DataGridViewSelectedCellCollection은 일반 IEnumerable<DataGridViewCell> (IEnumerable)을 구현하지 않으므로 필요합니다. 따라서 값을 열거하면 숫자는 Object입니다. 캐스트로, 그 줄 것이다 : 나는 일을해야 LINQ 구문 SELECT DISTINCT의 일종이 있어야처럼

int[] rowIndexes = (from sc in this.SelectedCells.Cast<DataGridViewCell>() 
        select sc.RowIndex).Distinct().ToArray(); 
+0

굉장해! +1하고 답하십시오. 그냥 궁금하지만 대체 구문은 무엇입니까? int [] rowIndexes = (this.SelectedCells에서 sc.RowIndex를 선택하십시오.) .Distinct(). ToArray(); 답변에 추가 할 수 있습니까? – BuddyJoe

+0

내 대답을 편집했습니다. –

+0

아 좋아요. LINQ 및 .Cast <>()에서 기사 하나 또는 두 개를 읽어야합니다. 감사. – BuddyJoe

1
IEnumerable<int> indexes = 
(from c in dataGridView1.SelectedCells.Cast<DataGridViewCell>() 
    select c.RowIndex).Distinct(); 
관련 문제