Q&A

  • 디비그리드에서 한 셀클릭시 그줄의 자료 에디터에 보여주기
디비그리드에서 한셀을 클릭해주면 각각의



에디트 박스에 한 레코드 자료를 가지고 오는 방법이 잘 안되네요



제 소스는 이렇습니다.



procedure TForm1.DBGrid1CellClick(Column: TColumn);

begin

CodeEd.Text := Qr_VCD.FieldByName('Code').AsString;

NameEd.Text := Qr_Vcd.FieldByName('Name').AsString;

ActEd.Text := Qr_Vcd.FieldByName('Act').AsString;

ContryEd.Text := Qr_Vcd.FieldByName('Contry').AsString;

ComboBox1.Text := Qr_Vcd.FieldByName('Taste').AsString;

ContryEd.Text := Qr_Vcd.FieldByName('Memo').AsString;

ActiveControl := CodeEd;

end;



3  COMMENTS
  • Profile
    서영택 2000.12.30 03:08
    이런방법은 어떨까요



    TDataSource의 OnDataChange 이벤트에



    procedure TForm.DataSource1DataChange(Sender: TObject; Field: TField);

    begin

    CodeEd.Text := Qr_VCD.FieldByName('Code').AsString;

    NameEd.Text := Qr_Vcd.FieldByName('Name').AsString;

    ActEd.Text := Qr_Vcd.FieldByName('Act').AsString;

    ContryEd.Text := Qr_Vcd.FieldByName('Contry').AsString;

    ComboBox1.Text := Qr_Vcd.FieldByName('Taste').AsString;

    ContryEd.Text := Qr_Vcd.FieldByName('Memo').AsString;

    ActiveControl := CodeEd;

    end;



    이런식으로 코딩을 하면 Focus가 그리드상에 있을때 방향키로 움지이게되면

    자동으로 바뀐 레코드내용을 보여주게 되지요

    그리고 다른분이 말씀하신것처럼 Null값체크를 해주는것도 잊지마시구요...



    즐코딩하세요...



    박진수 wrote:

    > 디비그리드에서 한셀을 클릭해주면 각각의

    >

    > 에디트 박스에 한 레코드 자료를 가지고 오는 방법이 잘 안되네요

    >

    > 제 소스는 이렇습니다.

    >

    > procedure TForm1.DBGrid1CellClick(Column: TColumn);

    > begin

    > CodeEd.Text := Qr_VCD.FieldByName('Code').AsString;

    > NameEd.Text := Qr_Vcd.FieldByName('Name').AsString;

    > ActEd.Text := Qr_Vcd.FieldByName('Act').AsString;

    > ContryEd.Text := Qr_Vcd.FieldByName('Contry').AsString;

    > ComboBox1.Text := Qr_Vcd.FieldByName('Taste').AsString;

    > ContryEd.Text := Qr_Vcd.FieldByName('Memo').AsString;

    > ActiveControl := CodeEd;

    > end;

    >

  • Profile
    모름이 2000.12.30 02:54
    ^^;

    저두 잘 모르지만..

    dbgrid와 dbedit를 서로 연결 사용한다면 되지 않을까여..?

    그러면 그리드에서 선택한 내용이 바로 dbedit에 뜨니깐요..구다지 이벤트를 기록하지

    않아도 돼죠.. ^^;(반드시 dbeditd에 datasource와 field값을 정의 해줘야 겠죠..)

    구다지 스트링그리드을 사용하지 않는다면.. cell과 row값을 계산할 필요는 없다고 보와요..?



    박진수 wrote:

    > 디비그리드에서 한셀을 클릭해주면 각각의

    >

    > 에디트 박스에 한 레코드 자료를 가지고 오는 방법이 잘 안되네요

    >

    > 제 소스는 이렇습니다.

    >

    > procedure TForm1.DBGrid1CellClick(Column: TColumn);

    > begin

    > CodeEd.Text := Qr_VCD.FieldByName('Code').AsString;

    > NameEd.Text := Qr_Vcd.FieldByName('Name').AsString;

    > ActEd.Text := Qr_Vcd.FieldByName('Act').AsString;

    > ContryEd.Text := Qr_Vcd.FieldByName('Contry').AsString;

    > ComboBox1.Text := Qr_Vcd.FieldByName('Taste').AsString;

    > ContryEd.Text := Qr_Vcd.FieldByName('Memo').AsString;

    > ActiveControl := CodeEd;

    > end;

    >

  • Profile
    김대빵 2000.12.30 01:42
    박진수 wrote:

    > 디비그리드에서 한셀을 클릭해주면 각각의

    >

    > 에디트 박스에 한 레코드 자료를 가지고 오는 방법이 잘 안되네요

    >

    > 제 소스는 이렇습니다.

    >

    > procedure TForm1.DBGrid1CellClick(Column: TColumn);

    > begin

    > CodeEd.Text := Qr_VCD.FieldByName('Code').AsString;

    > NameEd.Text := Qr_Vcd.FieldByName('Name').AsString;

    > ActEd.Text := Qr_Vcd.FieldByName('Act').AsString;

    > ContryEd.Text := Qr_Vcd.FieldByName('Contry').AsString;

    > ComboBox1.Text := Qr_Vcd.FieldByName('Taste').AsString;

    > ContryEd.Text := Qr_Vcd.FieldByName('Memo').AsString;

    > ActiveControl := CodeEd;

    > end;

    >



    우선 Qr_VCD라는 쿼리 컴포넌트가 Open이된 상태여야 합니다..

    그리고, 확인할 점은 그 쿼리가 현재 실행된 또, DB Grid상에 표출된Query문인가 하는것이구요..

    만약 위의 두가지가 모두 충족되어 있는 상태라면

    님께서 하신 방법이 모두 맞는군요...

    다만, 해당 필드값이 null이라면 error가 발생할 것이므로,

    null값에 대한 Check가 반드시 필요하겠지요..



    예를 들면,

    if Qr_Vcd.FieldByName('Contry').AsString <> '' then

    ContryEd.Text := Qr_Vcd.FieldByName('Contry').AsString;



    뭐 이런식이 되겠져...



    아참,, 아주 중요한 또 한가지 체크포인트....



    DBGRID의 옵션항목중에 dgRowSelect부분이 반드시 True로 설정되어 있어야 합니다...

    그렇지 않으면 Cellclick시에 Record로 인식하지 않기 때문이죠...



    그럼...