Q&A

  • DBGrid에서 클릭한 셀의 필드명을 아는 방법은?
또 도움을 요청드리네요.



DBGrid의 옵션을 다음과 같이 주었는데요

[dgTitles,dgIndicator,dgColumnResize,dgColLines,dgRowLines,dgTabs,dgRowSelect,dgConfirmDelete,dgCancelOnExit,dgMultiSelect]



이렇게 하면 셀단위의 선택이아니라 한줄 단위의 선택이 되는데요.



그런데 문제는 셀을 클릭했을때 클릭이벤트에서

클릭한 셀의 칼럼명이 아니라 꼭 DBGrid의 첫번째 칼럼의

필드명을 가져오네요. 어떻게 해야 클릭한 셀의 필드명을 얻을수

있을까요.



물론 DBGrid의 옵션중 dgRowSelect, dgMultiSelect을 제거하면

클릭한 셀의 필드명을 가져옵니다.



미리 감사 드립니다.



예) 아래는 클릭이벤트에서 처리한 방법 입니다.

procedure DBGridCellClick(

Column: TColumn);

begin

ShowMessage(Column.FieldName);

end;







4  COMMENTS
  • Profile
    홍성락 2001.12.26 22:52
    델사 wrote:

    > 또 도움을 요청드리네요.

    >

    > DBGrid의 옵션을 다음과 같이 주었는데요

    > [dgTitles,dgIndicator,dgColumnResize,dgColLines,dgRowLines,dgTabs,dgRowSelect,dgConfirmDelete,dgCancelOnExit,dgMultiSelect]

    >

    > 이렇게 하면 셀단위의 선택이아니라 한줄 단위의 선택이 되는데요.

    >

    > 그런데 문제는 셀을 클릭했을때 클릭이벤트에서

    > 클릭한 셀의 칼럼명이 아니라 꼭 DBGrid의 첫번째 칼럼의

    > 필드명을 가져오네요. 어떻게 해야 클릭한 셀의 필드명을 얻을수

    > 있을까요.

    >

    > 물론 DBGrid의 옵션중 dgRowSelect, dgMultiSelect을 제거하면

    > 클릭한 셀의 필드명을 가져옵니다.

    >

    > 미리 감사 드립니다.

    >

    > 예) 아래는 클릭이벤트에서 처리한 방법 입니다.

    > procedure DBGridCellClick(

    > Column: TColumn);

    > begin

    > ShowMessage(Column.FieldName);

    > end;

    /////////////////////////////////////////////////////////////////////////////////

    마우스다운에서 사용해보시죠

    procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

    var

    CelRow : TGridCoord;

    begin

    CelRow := DBGrid1.MouseCoord(X, Y);

    Edit1.Text := DBGrid1.Columns[CelRow.x-1].FieldName;

    end;

  • Profile
    델사 2001.12.26 23:11
    답변에 감사드립니다.



    그런데 저는 델파이3을 사용하고 있거든요. 그래서 그런지

    DBGrid상에 있는 이벤트에는 MouseUp이 없네요.

    님께서 말씀해주신 방법대로 하면 될 것 같은데,,,,

    어떻게 하면 MouseUp 이벤트를 사용할수 있나요?

    이벤트를 사용할 수 없다면 마우스포인트 좌표값을 얻는 방법은요?



    답변 주셨는데 또 질문드리게 되어 죄송하네요.



    그럼



    홍성락 wrote:

    > 델사 wrote:

    > > 또 도움을 요청드리네요.

    > >

    > > DBGrid의 옵션을 다음과 같이 주었는데요

    > > [dgTitles,dgIndicator,dgColumnResize,dgColLines,dgRowLines,dgTabs,dgRowSelect,dgConfirmDelete,dgCancelOnExit,dgMultiSelect]

    > >

    > > 이렇게 하면 셀단위의 선택이아니라 한줄 단위의 선택이 되는데요.

    > >

    > > 그런데 문제는 셀을 클릭했을때 클릭이벤트에서

    > > 클릭한 셀의 칼럼명이 아니라 꼭 DBGrid의 첫번째 칼럼의

    > > 필드명을 가져오네요. 어떻게 해야 클릭한 셀의 필드명을 얻을수

    > > 있을까요.

    > >

    > > 물론 DBGrid의 옵션중 dgRowSelect, dgMultiSelect을 제거하면

    > > 클릭한 셀의 필드명을 가져옵니다.

    > >

    > > 미리 감사 드립니다.

    > >

    > > 예) 아래는 클릭이벤트에서 처리한 방법 입니다.

    > > procedure DBGridCellClick(

    > > Column: TColumn);

    > > begin

    > > ShowMessage(Column.FieldName);

    > > end;

    > /////////////////////////////////////////////////////////////////////////////////

    > 마우스다운에서 사용해보시죠

    > procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

    > var

    > CelRow : TGridCoord;

    > begin

    > CelRow := DBGrid1.MouseCoord(X, Y);

    > Edit1.Text := DBGrid1.Columns[CelRow.x-1].FieldName;

    > end;

  • Profile
    홍성락 2001.12.26 23:59
    델사 wrote:

    > 답변에 감사드립니다.

    >

    > 그런데 저는 델파이3을 사용하고 있거든요. 그래서 그런지

    > DBGrid상에 있는 이벤트에는 MouseUp이 없네요.

    > 님께서 말씀해주신 방법대로 하면 될 것 같은데,,,,

    > 어떻게 하면 MouseUp 이벤트를 사용할수 있나요?

    > 이벤트를 사용할 수 없다면 마우스포인트 좌표값을 얻는 방법은요?

    >

    > 답변 주셨는데 또 질문드리게 되어 죄송하네요.

    >

    > 그럼

    ----------------------------------------------------------------------------------------

    테스트해보세요

    그리드의 마우스이벤트거 없을경우 화면상의 마우스위치에서

    진짜 해당 컴포에서의 위치를 구한다음 셀의 위치를 찾는방법으로 했는데요...

    procedure TForm1.DBGrid1CellClick(Column: TColumn);

    var

    xx, yy :integer;

    PaCon : TControl;

    begin

    xx := DBGrid1.Left;

    yy := DBGrid1.Top;

    PaCon := DBGrid1.Parent;

    while PaCon <> nil do begin

    XX := XX + PaCon.Left;

    YY := YY + PaCon.Top;

    PaCon := PaCon.Parent;

    end;

    xx := Mouse.CursorPos.x-xx;

    yy := Mouse.CursorPos.y-yy;

    CelRow := DBGrid1.MouseCoord(xx,yy);

    if CelRow.X > 0 then begin

    Edit2.Text := DBGrid1.Columns[CelRow.x-1].FieldName;

    Edit3.Text := DBGrid1.Fields[CelRow.x-1].AsString;

    end;

    end;



    /////////////////////////////////////////////////////////////////////////////////////////

    ////////////////////////////////////////////////////////////////////////////////////////

    > 홍성락 wrote:

    > > 델사 wrote:

    > > > 또 도움을 요청드리네요.

    > > >

    > > > DBGrid의 옵션을 다음과 같이 주었는데요

    > > > [dgTitles,dgIndicator,dgColumnResize,dgColLines,dgRowLines,dgTabs,dgRowSelect,dgConfirmDelete,dgCancelOnExit,dgMultiSelect]

    > > >

    > > > 이렇게 하면 셀단위의 선택이아니라 한줄 단위의 선택이 되는데요.

    > > >

    > > > 그런데 문제는 셀을 클릭했을때 클릭이벤트에서

    > > > 클릭한 셀의 칼럼명이 아니라 꼭 DBGrid의 첫번째 칼럼의

    > > > 필드명을 가져오네요. 어떻게 해야 클릭한 셀의 필드명을 얻을수

    > > > 있을까요.

    > > >

    > > > 물론 DBGrid의 옵션중 dgRowSelect, dgMultiSelect을 제거하면

    > > > 클릭한 셀의 필드명을 가져옵니다.

    > > >

    > > > 미리 감사 드립니다.

    > > >

    > > > 예) 아래는 클릭이벤트에서 처리한 방법 입니다.

    > > > procedure DBGridCellClick(

    > > > Column: TColumn);

    > > > begin

    > > > ShowMessage(Column.FieldName);

    > > > end;

    > > /////////////////////////////////////////////////////////////////////////////////

    > > 마우스다운에서 사용해보시죠

    > > procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

    > > var

    > > CelRow : TGridCoord;

    > > begin

    > > CelRow := DBGrid1.MouseCoord(X, Y);

    > > Edit1.Text := DBGrid1.Columns[CelRow.x-1].FieldName;

    > > end;

  • Profile
    델사 2001.12.27 02:11
    Mouse.CursorPos.x를 바로 사용 할 수 가 없어

    약간 수정해서 문제를 해결 했습니다.



    답변 고맙습니다.





    홍성락 wrote:

    > 델사 wrote:

    > > 답변에 감사드립니다.

    > >

    > > 그런데 저는 델파이3을 사용하고 있거든요. 그래서 그런지

    > > DBGrid상에 있는 이벤트에는 MouseUp이 없네요.

    > > 님께서 말씀해주신 방법대로 하면 될 것 같은데,,,,

    > > 어떻게 하면 MouseUp 이벤트를 사용할수 있나요?

    > > 이벤트를 사용할 수 없다면 마우스포인트 좌표값을 얻는 방법은요?

    > >

    > > 답변 주셨는데 또 질문드리게 되어 죄송하네요.

    > >

    > > 그럼

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

    > 테스트해보세요

    > 그리드의 마우스이벤트거 없을경우 화면상의 마우스위치에서

    > 진짜 해당 컴포에서의 위치를 구한다음 셀의 위치를 찾는방법으로 했는데요...

    > procedure TForm1.DBGrid1CellClick(Column: TColumn);

    > var

    > xx, yy :integer;

    > PaCon : TControl;

    > begin

    > xx := DBGrid1.Left;

    > yy := DBGrid1.Top;

    > PaCon := DBGrid1.Parent;

    > while PaCon <> nil do begin

    > XX := XX + PaCon.Left;

    > YY := YY + PaCon.Top;

    > PaCon := PaCon.Parent;

    > end;

    > xx := Mouse.CursorPos.x-xx;

    > yy := Mouse.CursorPos.y-yy;

    > CelRow := DBGrid1.MouseCoord(xx,yy);

    > if CelRow.X > 0 then begin

    > Edit2.Text := DBGrid1.Columns[CelRow.x-1].FieldName;

    > Edit3.Text := DBGrid1.Fields[CelRow.x-1].AsString;

    > end;

    > end;

    >

    > /////////////////////////////////////////////////////////////////////////////////////////

    > ////////////////////////////////////////////////////////////////////////////////////////

    > > 홍성락 wrote:

    > > > 델사 wrote:

    > > > > 또 도움을 요청드리네요.

    > > > >

    > > > > DBGrid의 옵션을 다음과 같이 주었는데요

    > > > > [dgTitles,dgIndicator,dgColumnResize,dgColLines,dgRowLines,dgTabs,dgRowSelect,dgConfirmDelete,dgCancelOnExit,dgMultiSelect]

    > > > >

    > > > > 이렇게 하면 셀단위의 선택이아니라 한줄 단위의 선택이 되는데요.

    > > > >

    > > > > 그런데 문제는 셀을 클릭했을때 클릭이벤트에서

    > > > > 클릭한 셀의 칼럼명이 아니라 꼭 DBGrid의 첫번째 칼럼의

    > > > > 필드명을 가져오네요. 어떻게 해야 클릭한 셀의 필드명을 얻을수

    > > > > 있을까요.

    > > > >

    > > > > 물론 DBGrid의 옵션중 dgRowSelect, dgMultiSelect을 제거하면

    > > > > 클릭한 셀의 필드명을 가져옵니다.

    > > > >

    > > > > 미리 감사 드립니다.

    > > > >

    > > > > 예) 아래는 클릭이벤트에서 처리한 방법 입니다.

    > > > > procedure DBGridCellClick(

    > > > > Column: TColumn);

    > > > > begin

    > > > > ShowMessage(Column.FieldName);

    > > > > end;

    > > > /////////////////////////////////////////////////////////////////////////////////

    > > > 마우스다운에서 사용해보시죠

    > > > procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

    > > > var

    > > > CelRow : TGridCoord;

    > > > begin

    > > > CelRow := DBGrid1.MouseCoord(X, Y);

    > > > Edit1.Text := DBGrid1.Columns[CelRow.x-1].FieldName;

    > > > end;