Q&A

  • DBGrid에서 Shift키를 누르고 Multi Select를 하려면...
안녕하세요...

DBGrid에서 Multi Select를 선택하면 Ctrl+마우스 클릭으로 선택을 해야 하는데 이것을 Shift로 범위를 선택하여 select되게 할 수 있는 방법은 없나요?
5  COMMENTS
  • Profile
    우영범 2002.11.14 03:14
    Bookmark 속성을 이용하면 Shift로 다중선택을 할 수 있습니다.

        Bookmark1, Bookmark2: TBookmark;


    procedure TfrmMain.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      // Shift + 마우스를 누른 경우 해당 영역을 선택한다.
      // 이전 bookmark와 현재 bookmark를 비교해서 선택영역을 찾을 수 있다.
      if ssShift in Shift then
      begin
         with Query1 do
         begin
            DisableControls;
            while True do
            begin
               Bookmark2:= Query1.GetBookmark;
               // 이전 bookmark 위치가 아니면 현재 행을 선택하고,
               // 그렇지 않으면 현재행을 선택한 후 빠져나간다.
               if Query1.CompareBookmarks(Bookmark1, Bookmark2) <> 0 then
                  dbgrid1.SelectedRows.CurrentRowSelected:= True
               else
               begin
                  dbgrid1.SelectedRows.CurrentRowSelected:= True;
                  Break;
               end;
               if BOF or EOF then Break;
               if Query1.CompareBookmarks(Bookmark1, Bookmark2) = -1 then
                  Prior
               else Next;
            end;
            EnableControls;
         end;
      end
      else
         Bookmark1:= Query1.GetBookmark;

    end;

  • Profile
    윤종경 2002.11.13 02:14
    TMS Grid쓰세요
    많이들 쓰시는 AdvStringGrid, DbAdvStringGrid말이에요

    DbAdvStringGrid에 보시면 MouseActions - DisjunctRowSelect 프로퍼티를
    True로 잡아주시면 Shift로 범위선택, Ctrl낱개선택 모두 하실수 있습니다.

  • Profile
    DelChoBo 2002.11.12 23:01
    DBGrid 자체에서는 Shift 이용한 범위선택이 불가 한 걸로 알고 있습니다.
    정 사용하고 싶으시다면 해당 기능이 있는 컴포넌트를 찾으시거나
    코딩을 통해 구현하셔야 할것 같네요.
    그럼..

  • Profile
    민인규 2002.11.12 23:04
    답변감사드립니다.
    죄송하지만 혹시 근런 컴포넌트를 가지고 계시지는 않나요?


  • Profile
    윤종경 2002.11.13 02:27
    http://www.tmssoftware.com/ 이곳에 가시면 다운받을수 있습니다.
    Demo Source에는 AdvStringGrid, AdvColumnGrid만 있는데
    두가지 분석 잘하시면 사용하는데 문제 없을겁니다.