Q&A

  • DBGrid에서 입력된 값 알아내는 방법..
안녕하세요...

여기서 자주 도움 받는 Heaven입니다..



제가 다름이 아니옵고, DBGrid에서 값을 입력받았는데..

엔터키를 눌렀을때 그 셀에 입력된 값을 구하고 싶습니다.

그 값을 가지고 어떤 처리를 하고 싶거든요..



그래서 KeyPress에서 Key==13일때 그 값을 읽으려고,



AnsiString str := Table1.FieldByName("code").AsString;



이런식으로 했는데요..값이 널값이 넘어옵니다..

아무래도, 입력된값이 적용인 안된거 같은데, 알아내는 방법이

없을까요..

임의대로 Post를 하고 구하니까 구해지던데, 그러면 취소할때나..

여러가지 문제가 있을꺼 같습니다..



하고자 하는일은 엔터키를 눌렀을때, 그 위치의 셀의 값을 읽어서

어떤 처리를 하고, 그 처리 결과에 따라 다음 셀로 이동하든지,

다시 입력받든지 하는 것입니다...



그리고 아래에 질문을 드렸는데, 임의의 셀로 이동하는 문제 말인데요..

Table1.SelectedFiedl := Table1Field;

이런식으로 원하는 테이블의 필드를 했는데 인식을 못하더군요..

음..왜그런지..제가 잘못했는지도....그리고,

위의 방법말고, 원하는 Row와 Col값을 주면 그 위치로 이동하는

방법을 원합니다..



그럼..정말..부탁드릴께요..



3  COMMENTS
  • Profile
    류동균 1999.06.20 08:00
    Heaven 께서 말씀하시기를...

    > 안녕하세요...

    > 여기서 자주 도움 받는 Heaven입니다..

    >

    > 제가 다름이 아니옵고, DBGrid에서 값을 입력받았는데..

    > 엔터키를 눌렀을때 그 셀에 입력된 값을 구하고 싶습니다.

    > 그 값을 가지고 어떤 처리를 하고 싶거든요..

    >

    > 그래서 KeyPress에서 Key==13일때 그 값을 읽으려고,

    >

    > AnsiString str := Table1.FieldByName("code").AsString;

    >

    > 이런식으로 했는데요..값이 널값이 넘어옵니다..

    > 아무래도, 입력된값이 적용인 안된거 같은데, 알아내는 방법이

    > 없을까요..

    > 임의대로 Post를 하고 구하니까 구해지던데, 그러면 취소할때나..

    > 여러가지 문제가 있을꺼 같습니다..

    >

    > 하고자 하는일은 엔터키를 눌렀을때, 그 위치의 셀의 값을 읽어서

    > 어떤 처리를 하고, 그 처리 결과에 따라 다음 셀로 이동하든지,

    > 다시 입력받든지 하는 것입니다...

    >

    > 그리고 아래에 질문을 드렸는데, 임의의 셀로 이동하는 문제 말인데요..

    > Table1.SelectedFiedl := Table1Field;

    > 이런식으로 원하는 테이블의 필드를 했는데 인식을 못하더군요..

    > 음..왜그런지..제가 잘못했는지도....그리고,

    > 위의 방법말고, 원하는 Row와 Col값을 주면 그 위치로 이동하는

    > 방법을 원합니다..

    >

    > 그럼..정말..부탁드릴께요..

    > ---------------------------------

    첫번째 질문의 답.

    KeyPress의 13키값으로 체크하면 그 셀의 값을 알수가 없읍니다.

    그래서 그 셀의 값을 알고 싶으면 Tab키를 친후에 알수가 있지요.

    다시 말해서 Focus가 다음셀에 가야만 그 셀의 값을 알수가 있읍니다.

    두번째 질문의 답.

    역시 Focus의 문제로서 Table1.SetFocus(?)명령이 빠진것 같네요. 아니면 DBGrid면 DBGrid1.SetFocus 명령이 빠졌네요.

    답변이 되었으면 좋겠읍니다.







  • Profile
    Heaven 1999.06.20 08:54
    안녕하세요..류동규님..

    답변 잘 들었습니다..



    말씀하신대로, 포커스가 다음 셀로 이동해야만 그 값이 적용된다는 것을

    알겠는데요. 그럼, 값을 입력받고 다음 셀로 이동한다음, 그 입력된값을

    알아내서, 그 값을 가지고 조작한후에 적당하지 않으면 원래셀로 이동해서

    다시 입력받고 해야되나요?



    그래야만 된다면, 좀 더 좋은 방법을 알려주시면 고맙겠네요..

    그리고, 엔터키가 눌렸을때 다음 셀로 이동하도록 처리했습니다.



    두번째 질문에서, 특정 필드로 옮길때, SetFocus도 했는데 안되네요.

    DBGrid1.SelectedField := Table1Field 에서

    Table1Field를 인식못하네요. 분명히 그 필드가 존재하는데,

    그 필드를 인식 못합니다...음..무척 고민되네요..

  • Profile
    류동균 1999.06.20 21:57
    답변에 도움이 되었다니 다행이네요.

    첫번째 방법은 현재로선 다른 방법이 없는것 같네요.

    DBGrid의 OnColEnter이벤트에서 다음과 같은 방법으로 처리를 하면 어떨까요.

    첫번째 필드:A , 두번째 필드:B 라면

    첫번째 필드에서 값을 받은후 두번째 필드에 포크스가 온후 체크하면 되니까?

    if DBGrid.SelectedField=Table1.Fields[1](or Table1.FieldByName('B')) then

    begin

    첫번째 필드값을 알아내기 (=Table1.FieldByName('A').Value)

    그리고 체크한후 다시 첫번째 필드로 가야 될경우

    DBGrid.SelectedField:=Table1.FieldByName('A')(or Table1.Fields[0]);

    DBGrid.SetFocus;

    end;

    두번째 방법은 위의 예문가 같은 방법으로 명령을 쓰면 되는데 그래도

    안된다면 아마 이벤트의 선후 처리 문제인것 같네요.

    그 명령이 처리된후에 따른 이벤트가 처리 되면 그렇게 되지요.

    참고로 Abort라는 명령을 적절히 사용하면 해결될 수 있지요.

    이 방법으로 해결이 되었으면 좋겠네요.

    음. 소스가 있으면 더욱 확실하게 답변을 드릴수가 있는데.... ^_^

    즐거운 주말 되세요.