델파이

Table 과 직접 연결된 TDBGrid에서 값 수정후 엔터시 깔끔한 처리

미스터몽키 2016. 9. 10. 10:35

Table 과 직접 연결된 TDBGrid에서 값 수정후  저장하지 않고 엔터시 수정전의 값이 보여지는 버그가 있다.


 수정전


수정중


수정중 저장하기전 엔터


기본적으로 TDBGrid에서 엔터키를 입력한면 토글로 셀 선택모드와 수정 모드로 전환되는데 이때 선택 모드에서는 저장된 값을

가져오기 때문인 것 같다.


다음 코드는 엔터시 항상  수정모드로 되게 하여 버그를 해결한다.


procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
 
  if Key = #13 then
  begin
    Key := #0;
    TDBGrid(Sender).EditorMode := True;
  end;


end;


(추가)

예전에 사용하던 방법으로 강제로 마지막 컬럼으로 이동했다가 다시 오는 것도 가능하다.


procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var t_Field : TField;
begin
  if Key = VK_RETURN then
  begin
    t_Field := (Sender as TDBGrid).SelectedField;
    (Sender as TDBGrid).SelectedField := (Sender as TDBGrid).Fields[(Sender as TDBGrid).SelectedIndex + 1]; //마지막 컬럼으로 이동
    (Sender as TDBGrid).SelectedField := t_Field;
  end;
end;