2013-03-19 3 views
0

메신저 datagridview 데, 이제는 내 요구 사항을 사용하여 셀을 편집하고 Enter 키 또는 Tab 키를 클릭 할 때 새 셀 값을 데이터베이스로 업데이트해야합니다. 즉 데이터베이스에 새 값을 업데이트 할 수 있어야합니다. datagridview의 keyup 이벤트에 내 코드를 작성했습니다. 이제 사용자가 Enter 키를 누를 때 keyup 이벤트에서 컨트롤이 다음 행으로 이동하므로 실제 탭 인덱스 키를 클릭하면 행 인덱스 값이 actualrowindex + 1이됩니다. , 컨트롤은 다음 열을 이동합니다. 그래서 im은 columnindex + 1로 열 인덱스를 얻습니다. 어떻게 이러한 이벤트를 처리 할 수 ​​있습니까? enetr 또는 tab 키를 클릭하면 정확한 열 인덱스 또는 rowindex를 가져올 수 있습니까? .. 아래는 tej 이벤트입니다. 내 코드를 썼습니다.DataGridview에서 keyup 이벤트가 발생 했습니까?

private void dataGridView1_KeyUp(object sender, KeyEventArgs e) 
    { 


    } 

답변

2

d 사용자가 셀의 값을 변경하는 많은 다른 방법이있을 때 Tab 키를 누릅니다. 예를 들어 다른 셀을 클릭 할 수 있습니다. 아마도 특정 키를 누를 때만이 아니라 다른 작업을 수행 할 때 데이터베이스를 업데이트하려고한다고 가정합니다.

KeyUp 이벤트를 처리하는 대신 CellValueChanged 이벤트를 처리하십시오. 이 이벤트는 사용자가 셀 값에 대한 변경을 커밋 할 때마다 발생합니다. 일반적으로 포커스가 셀을 떠날 때 발생합니다.

당신이 지적한대로 Enter 키를 누르면 커서가 열의 다음 셀로 이동하고 Tab 키를 누르면 포커스가 행의 다음 셀로 이동하므로 결과가 올바르게 적용됩니다. 또한 사용자가 마우스를 사용하여 다른 셀을 클릭하거나 화살표 키를 사용하여 다른 셀로 이동하거나 다른 커밋 변경 방법을 사용할 때도 작동합니다.

이 이벤트를 처리 할 때 항상 변경된 셀에 대해 올바른 행 인덱스와 열 인덱스를 가져옵니다. 이 정보는 e 매개 변수로 전달 된 DataGridViewCellEventArgs 개체에 들어 있으며 이벤트 처리기 메서드에 전달됩니다.

+0

내가 말한 것은 옳다. 나는 또한 시도했다. 그러나 문제는 사용자가 셀에 변경 사항을 커밋하지만 저장하지 않으려 고 셀을 떠나는 경우 값이 데이터베이스로 업데이트되고 그는 그 사실을 모르고있을 수도 있니? – adityaa

+0

물론 셀을 떠날 때마다 물어 보지 않는 한 그 값을 저지할지 여부를 막을 방법이 없습니다. 그건 용납 될 수 없으므로 다른 옵션은 사용자가 클릭 할 때 데이터베이스에 업데이트 만 커밋 한 "Save Changes"버튼을 추가하는 것입니다. –

+0

저장 단추를 클릭하면 datagridview에서 데이터베이스에 편집 된 셀 값만 저장하는 방법을 알 수 있습니까? 이것이 최선의 선택이라고 생각하십니까? – adityaa

관련 문제