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

그리드 내에서 버튼으로 수량 변경 > Q&A | 토론

본문 바로가기

ReactJS 그리드 내에서 버튼으로 수량 변경

페이지 정보

작성자 MESCIUSMAN 작성일 2023-07-06 09:48 조회 931회 댓글 2건
제품 버전 : "@grapecity/wijmo.react.all": "^5.20221.857",
컨트롤 이름 : grid

본문

아래와 같이 비슷하게 해주시면 css는 제가 변경해보겠습니다!



안녕하세요


0a0ae790da002986d510dfbd9057463e_1688604213_3335.png
위 그림 처럼 그리드 내에서 버튼을 누르면 수량이 오르고 내리는 기능을 추가하고 싶습니다.


아래처럼 소스에 select가 아닌 

한 셀 안에서 input으로 직접 수량을 적을 수 있고 화살표를 눌렀을 때 적은 수량에서 + - 를 하고 싶은데 쉽지가 않아 문의드립니다.

+ - 버튼은 양옆 input 가운데로 보였으면 좋겠네요


부탁드리겠습니다.


  const initializeGrid = (flex) => {
        setGridData(flex);
        flex.select(-1, -1);
        flex.formatItem.addHandler((s, e) => {
            if (e.panel == s.cells) {
                let col = s.columns[e.col],
                    item = s.rows[e.row].dataItem;
                if (item == _currentEditItem) {
                } else {
                    // create buttons for items not being edited
                    // eslint-disable-next-line default-case
                    switch (col.binding) {
                        case 'selects':
                            e.cell.innerHTML = document.getElementById('addtoselect').innerHTML;
                            e.cell['dataItem'] = item;
                            break;
                        case 'buttons':
                            e.cell.innerHTML = document.getElementById('addtocart').innerHTML;
                            e.cell['dataItem'] = item;
                            break;
                    }
                }
            }
        });
        // handle button clicks
        flex.addEventListener(flex.hostElement, 'click', (e) => {
            let targetButton = wjCore.closest(e.target, 'button');
            let targetSelect = wjCore.closest(e.target, 'select');
            let ht = flex.hitTest(e);
            if (ht.panel) {
                if (ht.panel.cellType === 1) {
                    let rowData = flex.rows[ht.row].dataItem;
                    if (targetButton instanceof HTMLButtonElement) {
                        // eslint-disable-next-line default-case
                        switch (targetButton.id) {
                            case 'addbtn':
                                setAddToCart(rowData);
                                break;
                        }
                    }
                    if (targetSelect instanceof HTMLSelectElement) {
                        // eslint-disable-next-line default-case
                        switch (targetSelect.id) {
                            case 'qtyselect':
                                // onSelectQty(e);
                                break;
                        }
                    }
                }
            }
        });
    };
 
  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

GCK루시님의 댓글

GCK루시 작성일

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

문의하신 '+,-'  버튼은 양옆 input 가운데로 보였으면 좋겠다고 말씀하셨는데 정확한 답변을 위해 원하시는 결과 화면을 이미지로 공유해주시면 확인 후 안내드리도록 하겠습니다.

감사합니다.
그레이프시티 드림

MESCIUSMAN님의 댓글

MESCIUSMAN 작성일

윗글 수정해서 올렸습니다 확인 부탁드립니다.

7 답변

ReactJS Re: 그리드 내에서 버튼으로 수량 변경

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

페이지 정보

작성자 GCK루시 작성일 2023-07-07 10:16 댓글 2건

본문

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


문의하신 기능의 경우,  이미지와 같이 Wijmo의 inputNumber 컨트롤을 열의 editor 속성에 설정하여 구현하실 수 있습니다. 


ecc602f4d9b6fbe94db9792c310a53bc_1688692526_4618.png
 

아래 저희 데모 링크를 공유드리오니 확인 부탁드립니다.


- 사용자 정의 편집기 

- InputNumber 단계


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


감사합니다.

그레이프시티 드림

댓글목록

MESCIUSMAN님의 댓글

MESCIUSMAN 작성일

고맙습니다. 더블클릭 시 수량변경이 가능한데 클릭 없이 + - 버튼이 나오도록 못하나요? 그리고 useState로 변화값을 받고 싶은데 어떻게 하나요 내부 css 디자인이 변경 가능할까요?

GCK루시님의 댓글의 댓글

GCK루시 작성일

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

해당 문의의 경우 저희 쪽에서 확인 후 답변드리도록 하겠습니다.

감사합니다.
그레이프시티 드림

ReactJS Re: 그리드 내에서 버튼으로 수량 변경

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

페이지 정보

작성자 GCK루시 작성일 2023-07-11 16:50 댓글 2건

본문

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


문의하신 내용에 대해 답변드립니다.


1. 그리드 셀 클릭 없이 InputNumber의 +,- 버튼 표시 방법

=> formatItem을 이용하여 셀에 InputNumber 컨트롤을 표시하시면 됩니다. 더불어 InputNumber의 hostElement를 셀에 직접 추가하여 오류 발생 가능성을 줄여주시기 바랍니다. 자세한 코드는 아래 샘플을 참고하여 주시기 바랍니다.


2.InputNumber 컨트롤 변화값 확인

=> InputNumber 값 업데이트를 처리하기 위해 이벤트 핸들러를 추가하는 대신 InputNumber의 valueChanged 이벤트를 사용하여 해당 이벤트 내의 상태 변수에 값을 저장할 수 있습니다. 자세한 코드는 아래 샘플을 참고하여 주시기 바랍니다.


 


- valueChanged API 문서


3. CSS 디자인 변경 문의

=> 말씀하시는 내부 CSS 디자인 변경의 범위가 방대하여 정확한 답변을 드리기 어려우나 Wijmo에 설정되어 있는 클래스를 접근 및 추가를 하여 배경색 등을 CSS에서 설정하거나 formatItem 등을 통해 스타일링 설정을 하실 수 있습니다. 아래 데모를 공유드리오니 참고 부탁드립니다.


- 행 스타일 지정


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


감사합니다.

그레이프시티 드림


댓글목록

MESCIUSMAN님의 댓글

MESCIUSMAN 작성일

안녕하세요 서버에서 호출했을 때 수량을 inputnumber에 바인딩하고 싶은데 어떻게 해야하나요?

ReactJS Re: 그리드 내에서 버튼으로 수량 변경

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

페이지 정보

작성자 GCK루시 작성일 2023-07-14 15:55 댓글 1건

본문

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


문의하신 내용이 기본 그리드를 먼저 생성 한 다음 특정 이벤트 후에 inputNumber를 생성 및 그리드에 바인딩하고 싶다는 말씀이실까요?


만일 맞으시다면 변수를 생성하여 formatItem 내 if문에서 해당 변수 조건을 추가해줍니다. 그 다음 특정 이벤트 후에 변수 값 재할당 및 조건 통과 처리하여 inputNumber 셀에 바인딩 될 수 있도록 처리해주시기 바랍니다.


더불어 FlexGrid의 refresh 메서드를 호출하여 그리드 디스플레이를 새로고침할 수 있으니 참고 부탁 드립니다.


refresh API 문서 


관련 API 문서를 공유드리오니 참고 부탁드립니다.


감사합니다.

그레이프시티 드림

댓글목록

MESCIUSMAN님의 댓글

MESCIUSMAN 작성일

맞습니다. 헌데...위에 설명해주신데로 했는데 잘 안됩니다. 알려주실 수 있을까요..?

ReactJS Re: 그리드 내에서 버튼으로 수량 변경

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

페이지 정보

작성자 GCK루시 작성일 2023-07-17 13:45 댓글 0건

본문

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


아래 간단한 샘플을 공유드리오니 해당 샘플에서 코드를 확인하시길 바랍니다.


샘플에서 test 버튼을 클릭 시, amount 열에 inputNumber 가 등장합니다.



감사합니다.

그레이프시티 드림

댓글목록

등록된 댓글이 없습니다.

ReactJS Re: 그리드 내에서 버튼으로 수량 변경

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

페이지 정보

작성자 GCK루시 작성일 2023-07-18 10:53 댓글 1건

본문

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


유선으로 문의주셨던 내용에 대해 안내드립니다.


말씀하신 InputNumber 컨트롤에 각각의 데이터를 설정하기 위해서는 InputNumber의 value 속성과 바인딩된 컬렉션의 항목을 가져오거나 설정할 수 있는 row의 dataItem을 사용해주시면 됩니다.


다만, value가 변경될 때, row의 dataItem 또한 변경 처리 해주셔야 합니다. 이를 위해 현재 변경 처리된(클릭 된) 행의 인덱스가 필요한데 그리드 hostElement에 click 이벤트를 추가 및 hitTest를 이용하여 가져올 수 있습니다.


자세한 코드는 아래 샘플에서 확인하실 수 있습니다. 


 


- value API 문서

- dataItem API 문서


관련 API를 공유드리며 다른 궁금한 점이 생기면 문의 주시기 바랍니다.


감사합니다.

그레이프시티 드림

댓글목록

MESCIUSMAN님의 댓글

MESCIUSMAN 작성일

감사합니다. 덕분에 해결되었습니다.
그리고 inputnumber +, - 버튼만 눌러서 수량 변경 가능하실까요?
가운데 input 부분만 disable 시키고 + ,  -  버튼으로만 수량 조절하고 싶습니다.

ReactJS Re: 그리드 내에서 버튼으로 수량 변경

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

페이지 정보

작성자 GCK루시 작성일 2023-07-24 17:34 댓글 1건

본문

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


해당 기능을 구현하기 위해서는 inputNumber의 hostElement에 keydown 이벤트를 추가 및 preventDefault를 호출해보시기 바랍니다.


  var test = new InputNumber(document.createElement("div"), {
        (....)
  });

  test.hostElement.addEventListener("keydown", function (e) {
          e.preventDefault();
 });


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


감사합니다.

그레이프시티 드림

댓글목록

MESCIUSMAN님의 댓글

MESCIUSMAN 작성일

답변 감사합니다
input 부분을 클릭을 아예 못하도록 하고 싶습니다 disabled로 설정은 안될까요? 서버에서 받아온 수량이 input 부분을 클릭하면 0으로 초기화 됩니다

ReactJS Re: 그리드 내에서 버튼으로 수량 변경

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

페이지 정보

작성자 GCK루시 작성일 2023-08-02 15:52 댓글 1건

본문

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


말씀하신 inputNumber의 input 영역의 클릭을 방지하기 위해서는 inputNumber inputElement의 disabled 설정을 해보시기 바랍니다.


test.inputElement.disabled = true;

- input disabled attribute 


다만 언급하신 값 초기화의 경우, 저희 쪽에서 재현이 되지 않아 정확한 원인 파악이 어려운 상황입니다. 관련하여 지속적으로 이슈 발생 시, 저희 쪽으로 재현 가능한 샘플을 공유해주신다면 재현 및 디버깅 후 답변 드리도록 하겠습니다.


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


감사합니다.

그레이프시티 드림


댓글목록

MESCIUS루시님의 댓글

MESCIUS루시 작성일

안녕하세요 메시어스입니다.

요청드린 내용에 회신이 없어 문의 종료 처리합니다.
추가 문의가 있으신 경우, 새 Q&A 글을 작성하여 주시기 바랍니다.

감사합니다.
메시어스 드림

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