2014-04-10 2 views
4

내 응용 프로그램에서 DataGridView를 사용하여 목록을 표시하고 있습니다. 사용자가 DataGridview에서 레코드를 선택하면 다른 패널에 세부 정보가 표시됩니다. 선택을 위해 DataGridView1_SelectionChanged 이벤트를 사용하도록 요청 받았습니다.DataGridView selectionChanged 이벤트가 여러 번 발생하는 문제

DataGridView에는 단 하나의 열만 포함해야하지만 세부 정보 표시에는 선택한 레코드에 대한 자세한 정보가있을 수 있습니다. 선택한 기본 키 값으로 쿼리하여 데이터베이스의 모든 세부 정보를 얻을 수 있습니다.

알려주십시오. DataGridView 레코드의 datakey (기본 키)를 가져올 수 있습니까? DataGridView가 기본 키 을 기반으로 바인딩합니까?

편집

I는 [ "ID"를] DataGridView1.Columns을 구현 하였다. 가시 = 거짓. 잘 돌아갔다. 선택시 DataGridView1_SelectionChanged 이벤트를 추가했습니다.

그러나 DataGridView1_SelectionChanged 이벤트가 여러 번 실행됩니다.

+1

요 u를 사용하여 기본 키 필드에 다른 열을 추가하고 dgv.CurrentRow.Cells [ "colPKField"]. – Shell

+0

그러나 GridView에 기본 키를 표시하지 않도록 요청 받았습니다. 나는 그것이 안전하지 않다라고 생각한다. ..! 너 무슨 소리 야? – Sanjeev4evr

+2

visible 속성을 false로 지정하여 해당 열을 숨길 수 있습니다. 'dgv.Columns [ "colPKField"]. Visible = false;' – Shell

답변

1

나는 RowEnter 이벤트로 시도했지만 제대로 작동합니다. 어떻게 확인하나요? 메시지 상자를 사용하거나 이벤트에 중단 점을 넣을 수 있습니다. 왜냐하면, breakpoint와 messagebox는 선택된 행으로부터 포커스를 잃어 버리기 때문입니다. 그런 다음 messagebox 나 중단 점 다음에 계속하면 그리드가 다시 집중되어 이벤트가 다시 실행됩니다.

다음 단계를 시도하여 이벤트 실행을 확인하십시오. enter image description here

다중 실행을 처리합니다.

int LastRowIndex =-1; 

private void dgv_RowEnter(...) 
{ 
    if (LastRowIndex != e.RowIndex) 
    { 
     //Place your code here. 
    } 
    LastRowIndex = e.RowIndex; 
} 
+0

'RowEnter'도 시도했습니다. 그러나 그것은 여러 번 발사됩니다. 양식이로드되고 격자의 측면 (빈 영역)을 클릭하면 해고되었습니다. 선택한 행 인덱스 값은 0입니다. – Sanjeev4evr

+0

그러면 임의의 변수에 마지막으로 선택한 행 인덱스를 저장하여 여러 실행을 피할 수 있습니다. – Shell

1

나는 오늘 같은 문제를 가지고 그것으로 실험 시간 후, 나는

this.dgvSearchResult.SelectionChanged -= dgvSearchResult_SelectionChanged; 
this.onSearch(); 
this.dgvSearchResult.SelectionChanged += new EventHandler(dgvSearchResult_SelectionChanged); 

이 당신은 데이터 그리드를 사용할 수 있습니다

12

도움의 희망이 문제에 대한 해결책 또는 오히려 해결 방법을 발견 다음과 같은 코드를 실행하기 전에 selectionchanged 이벤트에서 .focused 속성을 사용하십시오.

+1

엄청난 존경심!이 문제는 Win Forms에서 흔히 발생하는 문제이며 가장 간단한 해결책이 있습니다! 이 부동산이하는 일을 설명해 주시겠습니까? MSDN 설명서가 명확하지 않습니다. – 3bdalla

+0

고맙습니다. 내 인생을 살리십시오 ;-) – Esi

관련 문제