|
권선미 님이 쓰신 글 :
: DBgrid에서... 마우스로 클릭한...Row의 내용을..
: 하나씩.. 텍스트 박스에 넣고 싶거든요..
: 그러니까.. 마우스로 하나의 Row를 클릭하면...
: 그 내용이...컬럼별로 나누어져 각각 텍스트 박스로.. 보여지는거죠..
: 어떻게 하는 건가여?
구체적으로 어떤 일을 하실려는지 정확히는 잘 모르겠습니다만..
제가 실제로 업무용 프로그램을 짤때 썼던 방법을 알려 드리죠.
DBGrid에 바운딩 되어있는것이 TTable든 TQuery든 현재 DB가 Open되어 있는
상태죠?
그 상태에서 DBGrid를 클릭을 하면 DBGrid의 맨 왼쪽부분을 보면 삼각형이 보일겁니다.
아마 Row를 바꿀때마다 따라 다닐겁니다.
그게 흔히 이야기 하는 "레코드포인터"입니다.
즉...
현재 어떤 레코드에 포커스가 있다...라는 뜻이 되는거죠
그렇다면 현재 레코드가 사용자가 DBGrid를 클릭한 위치에 있기때문에
그냥 뿌려주면 됩니다...
뿌려줄 필드명을 name, address, phone라고 했을때...
Edt_Name->Text = Query1->FieldByName("name")->AsString;
Edt_Addr->Text = Query1->FieldByName("address")->AsString;
Edt_Phone->Text = Query1->FieldByname("phone")->AsString;
라고만 적어줘도 바로 보이게 되는거죠..
물론 DBGrid의 OnCellClick 이벤트에 말이죠..
그런데 여기서 간과해서는 안될것이 있습니다.
마우스로 클릭을 했을때는 위의 방법으로 해결이 됩니다만....
만일 포커스가 DBGrid에 있는 상태에서 키보드 상하좌우(커서)키로 움직여 보십시요
분명히 맨왼쪽의 삼각형(즉 레코드포인터)는 이동이 됩니다만 에디트 박스에는 뿌려지지가 않습니다.
당연하죠...해당 이벤트에 코딩을 안해줬으니까...
그걸 또 코딩을 해줘야 합니다.
DBGrid의 KeyPress 이벤트에 커서키에 해당하는 Key값인 39, 40, 41, 42를 눌렀을때
위의 코딩을 또 해줘야 한다는 말이죠.
코딩을 하고 동작시켜보십시요..
분명히 오동작 할겁니다...-_-;;;
그리고 또...
DBGrid를 클릭하지 않고 상하 스크롤바를 움직여 보십시요.
분명히 레코드 포인터는 이동을 합니다.
이번에도 역시 Edit에는 데이터가 안변합니다.
그것도 코딩해 줘야 합니다...
도데체 똑같은 코딩을 몇번해야 하는지...
눈치 채셨는지 모르겠습니다만..위의 것들이 모두 틀린답입니다.
답은 전혀 엉뚱한데 있습니다.
님께서 질문하신데 대한 답은
님이 DBGrid에 바운딩시킨게 TTable 이든 TQuery이든간에
그 컴포넌트의 이벤트로 가세요.
거기에 보시면 AfterScroll 이란 이벤트가 있습니다.
그 이벤트안에...
Edt_Name->Text = Query1->FieldByName("name")->AsString;
Edt_Addr->Text = Query1->FieldByName("address")->AsString;
Edt_Phone->Text = Query1->FieldByname("phone")->AsString;
이런식으로 코딩을 해 주시고 실행 시켜 보세요.
그러면 마우스로 클릭을 하든, 키보드의 커서키로 이동을 하든, DBGrid의 스크롤바를
움직여 레코드 포인터를 이동을 시키든...다 동작을 할겁니다.
단...
쿼리든 테이블인든..그 안에 데이터가 들어있어야 합니다.
데이터가 없다면...즉 Bof==true && Eof==true 이면 에러가 발생합니다.
에러처리를 해주시면 되겠죠?
그럼 즐프하세요
|