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

grid cell 색상 변경 > Q&A | 토론

본문 바로가기

ReactJS grid cell 색상 변경

페이지 정보

작성자 fxdev1 작성일 2024-02-19 18:05 조회 124회 댓글 0건
제품 버전 : 5.20231.904

본문

안녕하세요


grid cell에 색상 변경에 대해 질문드립니다.

색상 변경은 되는데, 엑셀 export 시 파일에서는 변경된 색상으로 되지 않아서 문의 드립니다.


해당 코드를 약식으로 올립니다.

const style = [
      {
        row: 2,
        col: 3,
        className: ['yellow'],
      },
      {
        row: 0,
        col: 0,
        className: ['yellow'],
      },
    ];

    flexGrid.formatItem.addHandler((s, e) => {
      if (e.panel.cellType == CellType.ColumnHeader) {
        if (style.length) {
          let row = e.row;
          let col = e.col;

          style.forEach((x) => {
            if (x.row === row && x.col === col) {
              x.className?.forEach((name) => {
                toggleClass(e.cell, name, true);
              });
            }
          });
        }
      }
    });


2. 엑셀 엑스포트 코드입니다.

saveExcel = (fileName) => {
   

    wjcGridXlsx.FlexGridXlsxConverter.saveAsync(
      flexGrid,
      {
        includeColumnHeaders: true,
        includeStyles: true,
      },
      fileName > '' ? fileName : 'FlexGrid.xlsx'
    );

  };


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

댓글목록

등록된 댓글이 없습니다.

3 답변

ReactJS Re: grid cell 색상 변경

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

페이지 정보

작성자 MESCIUS루시 작성일 2024-02-20 17:57 댓글 0건

본문

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


문의하신 내용과 관련하여 공유해주신 코드를 토대로 재현하고자 했으나 안타깝게도 재현이 되지 않아 정확한 원인 파악이 어렵습니다. 


관련하여 저희 쪽으로 재현 가능한 샘플 프로젝트를 공유해주신다면 재현 및 디버깅 후 안내드리겠습니다.


감사합니다.

메시어스 드림

댓글목록

등록된 댓글이 없습니다.

ReactJS Re: grid cell 색상 변경

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

페이지 정보

작성자 fxdev1 작성일 2024-02-21 09:53 댓글 1건

본문

안녕하세요.

재현이 어렵다 하셔서 Demo에 있는 샘플코드를 수정하여 작성하여 보았습니다.

샘플코드 : Header Merging | Grid | React Wijmo Demos (mescius.com)

※ 작성한 코드의 grid 사진

b2553976d8f611988caf96382cb6c538_1708476075_0968.png
※ 작성한 코드에서 Excel 다운로드 사진

b2553976d8f611988caf96382cb6c538_1708476103_0459.png
 

※ 작성 코드

import 'bootstrap.css';
import '@grapecity/wijmo.styles/wijmo.css';
import ReactDOM from 'react-dom/client';
import React from 'react';
import useEvent from 'react-use-event-hook';
import * as wjcGrid from '@grapecity/wijmo.react.grid';
import * as wjGrid from '@grapecity/wijmo.grid';
import './app.css';
import * as wjcGridXlsx from '@grapecity/wijmo.grid.xlsx'; // 추가 코드
function App() {
    let refGrid = React.createRef();  // 추가 코드
     // 추가 코드
    const style = [
      {
        row: 0,
        col: 0,
        className: ['yellow'],
      },
      ,
      {
        row: 0,
        col: 1,
        className: ['yellow'],
      },
      {
        row: 1,
        col: 2,
        className: ['yellow'],
      },
    ];

    const onInitialized = useEvent((grid) => {
        refGrid.current = grid;
        // create extra header row
        var extraRow = new wjGrid.Row();
        extraRow.allowMerging = true;
        //
        // add extra header row to the grid
        var panel = grid.columnHeaders;
        panel.rows.splice(0, 0, extraRow);
        //
        // populate the extra header row
        for (let colIndex = 1; colIndex <= 2; colIndex++) {
            panel.setCellData(0, colIndex, 'Amounts');
        }
        //
        // merge "Country" and "Active" headers vertically
        ['country', 'active'].forEach(function (binding) {
            let col = grid.getColumn(binding);
            col.allowMerging = true;
            panel.setCellData(0, col.index, col.header);
        });
        
        // 수정코드
        // change the color of header cells using a defined style
        grid.formatItem.addHandler(function (s, e) {
            if (e.panel.cellType == wjGrid.CellType.ColumnHeader) {
                if (style.length) {
                    let row = e.row;
                    let col = e.col;
            
                    style.forEach((x) => {
                        if (x.row === row && x.col === col) {
                            x.className.forEach((name) => {
                                e.cell.style.backgroundColor = name;
                            });
                        }
                    });
                }
            }
        });

        grid.autoGenerateColumns = false;
        grid.itemsSource = getData();
    });
    const getData = () => {
        var countries = 'US,Germany,UK,Japan'.split(',');
        var data = [];
        for (var i = 0; i < 20; i++) {
            data.push({
                id: i,
                country: countries[i % countries.length],
                active: i % 5 != 0,
                downloads: Math.round(Math.random() * 200000),
                sales: Math.random() * 100000,
                expenses: Math.random() * 50000
            });
        }
        return data;
    };

    // 추가 코드
    const saveExcel = async () => {
        wjcGridXlsx.FlexGridXlsxConverter.saveAsync(
            refGrid.current,
            {
                includeColumnHeaders: true,
                includeStyles: true,
            },
            'FlexGrid.xlsx'
        );
    }

    return (<div className="container-fluid">
      <wjcGrid.FlexGrid allowMerging="ColumnHeaders" alternatingRowStep={0} initialized={onInitialized}>
        <wjcGrid.FlexGridColumn binding="country" header="Country" allowMerging={true}/>
        <wjcGrid.FlexGridColumn binding="sales" header="Sales" format="n2"/>
        <wjcGrid.FlexGridColumn binding="expenses" header="Expenses" format="n2"/>
        <wjcGrid.FlexGridColumn binding="active" header="Active" allowMerging={true}/>
      </wjcGrid.FlexGrid>
      <button onClick={saveExcel}>Excel</button>
    </div>);
}
const container = document.getElementById('app');
if (container) {
    const root = ReactDOM.createRoot(container);
    root.render(<App />);
}가


감사합니다.

댓글목록

MESCIUS루시님의 댓글

MESCIUS루시 작성일

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

먼저 샘플 코드 공유 감사드리며 현상이 재현되어 확인 중에 있습니다. 관련하여 업데이트가 되는대로 안내드리겠습니다.

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

ReactJS Re: grid cell 색상 변경

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

페이지 정보

작성자 MESCIUS루시 작성일 2024-02-23 10:11 댓글 1건

본문

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


본사 개발팀에 문의해본 결과, 해당 동작은 기존의 FlexGrid 구조에 따라 병합된 열 헤더를 가진 그리드를 엑셀 파일로 내보내기할 때 예상되는 동작이라 합니다. 


이는 HTML 페이지에 그리드를 표시하는 경우에는 병합된 헤더 셀들을 단일 셀로 취급합니다. 반면에 그리드를 엑셀 파일로 내보내는 경우에는 병합된 헤더 셀들을 별도의 셀로 취급하며, 병합 범위에 있는 마지막 셀의 셀 스타일로 병합된 전체 셀의 스타일에 적용하기 때문입니다.


해당 현상을 방지하기 위해 formatItem 방식을 사용하여 스타일링을 적용할 때 병합된 범위의 셀이 모두 포함되도록 샘플의 style 객체를 수정하시면 됩니다. 자세한 코드는 아래 샘플에서 확인할 수 있습니다.



또 다른 방법으로 엑셀 내보내기를 위한 사용자 정의 formatItem(IFlexGridXlsxOptions)을 사용할 수도 있지만 해당 방법은 더 많은 리소스가 들 수 있으니 참고 부탁드립니다.


 


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


감사합니다.

메시어스 드림

댓글목록

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