2009-08-16 3 views
1

DataGridView의 현재 행 인덱스를 가져 오려고합니다. 문제는 현재 행이 새 행인 경우 CurrentRow가 새 행이 아닌 마지막 행으로 설정된다는 것입니다. 선택된 행이 현재 행인지, 현재 행이 반드시 선택되지는 않은 행이 선택 되었기 때문에 선택할 수 없습니다.DataGridView CurrentRow는 새 행을 제외합니다.

새 행의 색인을 가져올 수 있지만 새 행이 현재 행인지 어떻게 알 수 있습니까?

+0

안녕, 을 내가 당신 말은하지만 당신은 당신이 그것을 아 파크 할 whant 않는로 CurrentRow 사용해야하는 이유는 표시되지 않습니다 이해 어떤 방법으로? 안녕하십니까, Iordan – IordanTanev

+0

사용자가 버튼을 클릭 할 때 값을 사용하여 현재 행의 셀을 채 웁니다. 그 행이 새로운 행인 경우,이 행을 작성하고 셀을 값으로 채워야합니다. – Ruud

답변

3

나는 다음과 같은 코드를 통해 CellClick 이벤트에 중독 :

private void uiEntries_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    Console.WriteLine(e.RowIndex == uiEntries.NewRowIndex); 
} 

그 조건이 참

, 사용자의 선택 '새 행. 이 정보를 기반으로 새로운 행이 실제로 컬렉션에 없기 때문에 실제로 아무 것도 할 수 없기 전에 실제로는 ..Rows.Add() 메서드를 사용하여 새 레코드를 삽입해야 할 수도 있습니다. 새로운 행을 나타내는 자리 표시 자만 있습니다.

+0

나는 이것이 효과가있을 것이라고 생각한다. 최대한 빨리 시도하겠습니다. – Ruud

+0

솔루션에 결함이 하나 있습니다. 사용자가 키보드를 클릭하지 않고 현재 셀을 변경하면 키보드가 작동하지 않습니다. CurrentCellChanged 이벤트는 작동하지만 셀을 보내지 않습니다. – Ruud

+0

그러면 키 입력을 캡처하여 "움직임"에 응답해야하는지 확인해야 할 것입니다. 예를 들어, 마지막 줄 옆의 "아래쪽 화살표"는 사용자가 행을 추가하려고한다는 것을 나타냅니다 (아마도?). 그런 다음 위와 같이 동일한 단계 (새 레코드 삽입 등)를 수행 할 수 있습니다. –

0

이 속성 값은 문제를 해결할 수 있습니까?

dataGridView1.CurrentCell.RowIndex

+0

아니, 그 같은 문제, 나는 이미 그것을 시도했다. – Ruud

0

CellEnter 이벤트를 사용하여 CurrentCell.RowIndex를 양식 변수에 저장합니다. 다른 버튼을 클릭하면이 이벤트는 우리가 필요로하는 새로운 행 색인 대신에 마지막으로 기존의 행 색인으로 시작되므로 포커스가 해당 사례를 무시하도록 테스트합니다.

이렇게하면 CellClick 이벤트에서와 같이 커서를 새 행으로 이동할 수있는 모든 가능한 키 및 마우스 동작을 확인하지 않아도됩니다.

코드 VB에서 자동 변환 :

private int ActualCurrentRowIndex; 

private void DataGridView1_CellEnter(object sender, System.Windows.Forms.DataGridViewCellEventArgs e) 
{ 
    if (DataGridView1.Focused) { 
     ActualCurrentRowIndex = DataGridView1.CurrentCell.RowIndex; 
    } 
} 
관련 문제