! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

선택되어 있는 그리드 열을 다시 선택하면 선택이 해제되도록 하고 싶습니다. > Q&A | 토론

본문 바로가기

Wijmo

Q&A | 토론

VueJS 선택되어 있는 그리드 열을 다시 선택하면 선택이 해제되도록 하고 싶습니다.

페이지 정보

작성자 죠이러버 작성일 2021-04-28 15:21 조회 5,929회 댓글 0건
제품 버전 : 5.20211.781
컨트롤 이름 : FlexGrid

본문

FlexGrid 를 열선택 모드로 설정해서 선택한걸 다시 누르면 선택이 해제되도록 하고 싶습니다.


onSelectionChanged event 처리기를 통해 자체적으로 구현을 해보았는데요.

선택 해제를 위해 flexGrid.select(-1, -1) 을 onSelectionChanged 처리기 내에서 수행하면 재귀적인 호출이 발생해서

해당문제를 해결하기 위해 여러가지 상태 변수가 계속 추가되면서 계속 코드가 복잡해 지더라구요.

게다가 마우스를 클릭할 때 선택이 되다보니, 선택후 마우스를 이동하면 다른 열이 선택되면서 여러가지 복잡한 상황이 발생해서요.


마우스 드래그 시에는 selection 이 안되게 처리한다던지 또는 mousedown 시에는 selection 이 발생 안되게 하고 mouseup 시에 해당 위치 열이 selection 되도록 설정할 수 있으면 좋을것 같은데 방법이 있을까요?


혹시 질문에 대해 참고가 되실까 해서 제가 작업했던 onSelectionChanged event 처리기 코드를 공유합니다. 현재는 마우스 드래그로 인한 selection 발생 시 여러가지 문제가 있어 비활성화 한 상태입니다.


   onSelectionChanged(val) {
      this.bSelectSomething = true;
      if (this.bMouseUpAfterSelection == falsereturn;
      if (this.flexGrid != null) {
        if (this.flexGrid.selection.col == -1 || this.flexGrid.selection.row == -1return;
        if (this.currentSelection != null && this.currentSelection === this.flexGrid.selectedItems[0]) {
          console.log("[MainGrid]onSelectionChange selected twice:"this.currentSelection);
          let gapTimestamp = +new Date() - this.lastSelectTimestamp;
          if (gapTimestamp > 1500) {
            this.currentSelection = null;
            this.flexGrid.select(-1-1);
            this.lastSelectTimestamp = +new Date();
          }
        } else {
          this.currentSelection = this.flexGrid.selectedItems[0];
          console.log("[MainGrid]onSelectionChange selected new:"this.currentSelection);
          console.log("[MainGrid]onSelectionChange select val:"this.flexGrid.selection);
          this.flexGrid.select(this.flexGrid.selection.row-1);
          this.lastSelectTimestamp = +new Date(); //Math.floor(+new Date() / 1000);
        }
        this.$emit("on-main-select"this.currentSelection);
        this.bMouseUpAfterSelection = false;
      }
    },



  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

1 답변

VueJS Re: 선택되어 있는 그리드 열을 다시 선택하면 선택이 해제되도록 하고 싶습니다.

추천0 이 글을 추천하셨습니다 비추천0 채택채택

페이지 정보

작성자 GCK루시 작성일 2021-04-29 10:22 댓글 0건

본문

안녕하세요 그레이프시티입니다.


문의 주신 선택되어 있는 그리드 열의 선택 해제와 관련하여 답변 드립니다.


먼저, FlexGrid를 클릭하여 mousedown이 될 때, addEventListner를 통해 이벤트를 등록한 뒤, 주어진 포인트의 정보를 가져오는 hitTest 메서드를 이용하여 현재 클릭한 곳이 열의 머리글인지 확인하여 클릭한 열의 인덱스에 선택이 되지 않았다면 isSelected를 true로 설정합니다. isSelected는 열/행이 선택이 됐는지 설정 및 확인할 수 있는 속성입니다.


선택된 열을 다시 클릭하면 isSelected 상태를 false로 할당하고 열의 첫번째 셀에 포인터가 가지 않도록 select(-1,-1)로 주어 선택을 clear합니다. 추가적으로 드래그 선택을 방지하기 위해서 FlexGrid의 선택 모드를 Cell로 두었습니다.


자세한 코드는 아래 샘플을 참고하여 주시기 바랍니다.




[isSelected]

https://demo.grapecity.co.kr/wijmo/api/classes/wijmo_grid.column.html#isselected


[hitTest]

https://demo.grapecity.co.kr/wijmo/api/classes/wijmo_grid.flexgrid.html#hittest


[Vue버전 샘플 링크]

https://codesandbox.io/s/vueselectionclear-yi0t4?file=/src/App.vue 


관련 샘플 링크와 도움말 문서도 전달 드리니 참고하여 주시기 바랍니다.


다른 궁금한 점이 생기면, 언제든 문의 주시기 바랍니다.


감사합니다. 

그레이프시티 드림 


* 그레이프시티(GrapeCity)는 개발자를 위하여 ComponentOne(컴포넌트원), Spread(스프레드), ActiveReports(액티브리포츠), SpreadJS(스프레드JS), Wijmo(위즈모)와 같은 엑셀 스프레드시트 리포팅 그리드와 차트 등 다양한 종류의 .NET JavaScript(자바스크립트) 컴포넌트 툴을 생산하고있는 개발툴 전문 회사 입니다.


댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.