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

그리드 높이 조절 > Q&A | 토론

본문 바로가기

Angular 그리드 높이 조절

페이지 정보

작성자 111234 작성일 2023-11-02 17:48 조회 208회 댓글 0건
제품 버전 : 5.20222.877
컨트롤 이름 : FlexGrid

본문

그리드에 세로 스크롤이 생기지 않도록

그리드의 높이가 자동으로 조절될 수 있는 방법이 있는지 문의 드립니다.


현재 그리드에서는 아래와 같은 이벤트가 발생합니다.


1.  splice() 신규 행 중간 삽입(중간에 삽입되는 행은 데이터가 세팅되어 삽입. 그리드는 autoRowHeights="true")

2. addNew() 신규 행 맨아래 추가 (행 추가 시 행의 기본 높이는 100)

3. 셀 데이터 편집 완료 (그리드는 autoRowHeights="true", 편집하는 컬럼은  multiLine="true")

4. 조회 후 그리드 데이터 세팅 ( this.data.sourceCollection = [{..}..]; )


위의 4가지 상황에서 그리드의 높이를 조절하여 스크롤이 생기지 않게 하고 싶습니다.


간략하게 적용된 그리드 소스입니다. 

<wj-flex-grid #grid [style.height.px]="grid.cells.height < 500 ? 500 : grid.cells.height+10"></wj-flex-grid>

최소 높이(500)가 있고 최소 높이보다 행 높이의 합이 작으면 최소 높이로 설정하고,

행 높이의 합이 최소 높이보다 커지면, 그리드의 높이를 행 높이의 합+10으로 설정하고자 작성된 소스입니다.

소스를 이렇게 작성했을 때 결과적으로 스크롤은 생기지 않지만 위 4가지 경우 행의 높이가 변경되면 순간적으로 스크롤이 생겼다가 없어지면서 깜빡이는게 눈에 보입니다.

깜빡이는 것도 없이 자연스럽게 그리드의 높이를 변경하려면 어떻게 해야할까요


추가적으로, 그리드에 입력한 데이터의 텍스트 길이를 실시간으로 체크할 수 있는 방법이 있나요?

그리드의 컬럼은 한개이고, 사용자가 편집모드에서 입력하는 즉시(편집중인 상태에서) length를 체크하고

제한 길이를 넘어가면 더이상 텍스트를 입력할 수 없게 막고 싶습니다.

(텍스트 길이는 편집모드가 아닌 전체 행의 텍스트와 편집모드인 행의 입력중인 텍스트 길이의 합 )

구현은 가능한지 어느 이벤트에서 해당 기능을 구현할 수 있는지 가이드 요청 드립니다.



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

댓글목록

등록된 댓글이 없습니다.

3 답변

Angular Re: 그리드 높이 조절

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

페이지 정보

작성자 MESCIUS루시 작성일 2023-11-03 17:11 댓글 2건

본문

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


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


1. 그리드 크기 재조정

=> 그리드 크기 재조정의 경우, 아래 코드와 같이 그리드를 감싼 div에 max-height을 auto로 설정해보시기 바랍니다.


html

<div class="container-fluid">
    <wj-flex-grid #grid [(itemsSource)]="data"></wj-flex-grid>
</div>

css

.container-fluid{
    min-height: 500px;
    max-height: auto;
  }


2. 텍스트 길이 제한하는 방법

=> 해당 기능의 경우, FlexGrid의 hostElement에 keypress 이벤트를 이용하여 구현할 수 있습니다. 아래 간단한 코드를 참고하여 주시기 바랍니다.


html

    <wj-flex-grid  #grid [(itemsSource)]="data" (initialized)="initializeGrid(grid)">
    </wj-flex-grid>

ts

initializeGrid(grid: wjcGrid.FlexGrid) {
        grid.hostElement.addEventListener("keypress",function(e){
            var edt = grid.activeEditor; // 현재 활성 셀 편집기를 나타내는 HTML 입력 요소를 가져오기
            if (edt) {
                // 열 확인
                var col = grid.columns[grid.selection.col];
                if (col.binding === "country") {

                    // 글자 길이가 10 초과인지 체크
                    if (edt.selectionStart == edt.selectionEnd && edt.value.length >= 10) {
                        e.preventDefault();
                    }
                }
            }
        })
    }

- activeEditor API 문서


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


감사합니다.

메시어스 드림

댓글목록

111234님의 댓글

111234 작성일

안녕하세요.
답변해주신대로 그리드를 div로 감싸 높이를 조정하면 역시 스크롤은 생기지 않지만 깜빡이는것은 동일합니다.
게다가 addnew() 를 이용해 행의 높이가 100인 행을 추가하면 순간적으로 생긴 스크롤 때문에 행의 높이가 100에서 기본 높이로 변경되버립니다.
다른 방안이 있는지 아니면 알려주신 방안에서 어느 부분을 수정보완하면 될까요?

111234님의 댓글

111234 작성일

텍스트 길이 제한으로 keypress를 이용하라고 하셨는데 keypress로 제한을 하면 한글 입력 시에는 이벤트가 제대로 동작하지 않습니다..
보통 textarea에서 글자수 제한 시 keyup 이벤트를 이용해 체크하고 제한이 넘어가면 substring으로 데이터를 강제로 잘라서 길이를 맞췄는데, 그리드에서는 현재 입력(편집)중인 텍스트 길이와 편집모드가 아닌 다른 행들의 텍스트 길이의 합을 체크해 제한하고 싶습니다. (입력되는 텍스트의 제한은 없습니다. 영문 숫자 한글 특수문자 등 모든 문자 입력이 가능합니다.) 제한 길이를 넘어가면 키를 눌러도 입력이 되지 않아도 되고 입력중인 텍스트를 제한 길이에 맞게 잘라도 상관은 없습니다.

Angular Re: 그리드 높이 조절

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

페이지 정보

작성자 MESCIUS루시 작성일 2023-11-07 11:53 댓글 2건

본문

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


1. 스크롤 깜빡임 현상 문의

=> 문의하신 내용과 관련하여 저희 쪽에서 재현이 되지 않아 정확한 원인 파악이 어려운 상황입니다. 관련하여 기본 샘플을 공유드리며 해당 샘플을 바탕으로 저희 쪽으로 재현 가능한 샘플 및 사용 중인 브라우저를 공유해주신다면 재현 및 디버깅 후 답변 드릴 수 있도록 하겠습니다.


 


2. 그리드 셀 입력 제한 문의

=> keypress 이벤트의 경우, 아스키코드에 한글이 없어 나타난 현상으로 보입니다.

다만 관련하여 추가 확인이 필요하여 확인 요청드립니다.


- 제한 길이를 넘어가면 키를 눌러도 입력이 되지 않아도 되고 입력중인 텍스트를 제한 길이에 맞게 잘라도 상관은 없습니다.

=> 편집하고자 하는 행이 아닌 다른 행들의 텍스트 길이가 제한 길이를 넘어갈 때, 현재 편집 중인 셀의 편집모드를 제한하는 기능을 구현하고 싶다는 것은 이해했습니다.


다만 입력중인 텍스트를 제한 길이에 맞게 잘라도 상관없다고 하셨는데, 다른 행의 값의 길이가 제한 길이를 넘어갈 때, 현재 입력된 셀의 데이터 길이를 임의로 수정 또는 입력 취소하고 싶다는 말씀이 맞으실까요? 


정확한 답변을 위해 확인 요청드리오니 확인 후 회신주시면 감사드리겠습니다.


감사합니다.

메시어스 드림

댓글목록

111234님의 댓글

111234 작성일

100자까지 입력이 가능한 그리드에서,
현재 90자를 입력한 상황이라는 가정하에 
신규 행 혹은 기존 행에 데이터 입력 시에는 10자까지만 입력이 가능하며 만약 입력중에 10자가 초과되면 강제로 데이터를 잘라 10자만 남기거나 사용자가 키 입력을 해도 입력되지않도록 처리해 사용자가 더이상 입력하지 못한다는 걸 인지할 수 있는 방식이었으면 한다는 뜻이었습니다.

MESCIUS루시님의 댓글의 댓글

MESCIUS루시 작성일

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

확인 회신 감사드리며 확인이 끝나는대로 안내 드리도록 하겠습니다.

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

Angular Re: 그리드 높이 조절

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

페이지 정보

작성자 MESCIUS루시 작성일 2023-11-10 09:39 댓글 0건

본문

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


문의하신 내용의 경우, 그리드의 모든 데이터 항목을 반복하여 현재 텍스트 길이를 얻고 최대 길이 속성을 설정해줍니다. 그 다음 FlexGrid의 'prepareCellForEdit' 이벤트를 처리하여 입력 길이 제한을 위한 'maxlength' 속성을 설정합니다. 마지막으로 'keyup' 이벤트를 처리하여 현재 텍스트 길이를 확인하고 텍스트 제한에 도달하면 사용자에게 알리도록 처리할 수 있습니다.


아래 간단한 샘플을 공유드리오니 참고 부탁드립니다. 샘플에서는 전체 제한 길이를 15로 설정했습니다.



- prepareCellForEdit API 문서


감사합니다.

메시어스 드림

댓글목록

등록된 댓글이 없습니다.

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