FreeGridv1.15.1English

숫자 편집기

▲▼ 버튼과 화살표 키로 단계를 바꾸는 숫자 편집기. Shift는 10배, 소수 단계도 오차 없이, min·max는 편집·붙여넣기·채우기에서 모두 검사합니다.

실행 예제숫자 편집기

단계, Shift 10배, 소수, min·max 안내.

이 데모의 코드
import { createGrid, type ColumnDef, type Row } from '@freegridjs/core';
import { makeRows } from '../data';
import { button, separator, text, tr, type DemoContext } from '../ui';

export default function mount(ctx: DemoContext) {
  const h = (en: string, ko: string) => tr(ctx.lang, { en, ko });
  const data = makeRows(150).map((r, i) => ({ ...r, qty: i % 40, rate: Math.round((i % 20) * 5) / 100, rating: (i % 11) / 2 }));
  const grid = createGrid(ctx.host, {
    columns: [
      { field: 'name', header: h('Name', '이름'), width: 150 },
      { field: 'qty', header: h('Qty (0–99)', '수량(0~99)'), type: 'number', width: 120, editable: true, editor: { type: 'number', min: 0, max: 99 } },
      { field: 'rate', header: h('Rate (step 0.05)', '비율(0.05씩)'), type: 'number', format: '0.00', width: 140, editable: true, editor: { type: 'number', min: 0, max: 1, step: 0.05 } },
      { field: 'rating', header: h('Rating (0–5, 0.5)', '평점(0~5, 0.5씩)'), type: 'number', format: '0.0', width: 150, editable: true, editor: { type: 'number', min: 0, max: 5, step: 0.5 } },
    ],
    data, locale: ctx.lang,
  });
  grid.on('validationFailed', e => ctx.log(`refused ${String(e.value ?? '')}: ${e.message}`));
  text(ctx, h('Double-click a number: ↑ ↓ or ▲▼ step, Shift ×10. Type a value outside the range to see the message.',
    '숫자를 더블클릭하세요. ↑ ↓나 ▲▼로 단계, Shift는 10배. 범위 밖 값을 입력하면 안내가 나옵니다.'));
  separator(ctx);
  // pasting follows the same min / max rule as typing
  const paste = (v: number) => {
    grid.setRange({ start: { rowIndex: 0, colId: 'qty' }, end: { rowIndex: 0, colId: 'qty' } });
    const r = grid.pasteText(String(v));
    ctx.log(r.changed
      ? h(`${v} is within 0–99: pasted into row 1`, `${v}은(는) 0~99 범위 안이라 1행에 붙여넣었습니다`)
      : h(`${v} is outside 0–99: not pasted (skipped ${r.skipped} cell)`, `${v}은(는) 0~99 범위를 벗어나 붙여넣지 않았습니다 (건너뜀 ${r.skipped}칸)`));
  };
  button(ctx, h('Paste 50 into row 1 (accepted)', '1행에 50 붙여넣기 (허용)'), () => paste(50));
  button(ctx, h('Paste 150 into row 1 (refused)', '1행에 150 붙여넣기 (거부)'), () => paste(150));
  return grid;
}

숫자 컬럼(type: 'number')은 1,234, ₩5,000 같은 입력도 받는 입력칸으로 편집합니다. editor: { type: 'number', min, max, step }을 주면 ▲▼ 버튼, 화살표 키 단계, 범위 제한이 더해집니다.

기본 사용

const columns = [
  { field: 'qty', type: 'number', editable: true, editor: { type: 'number', min: 0, max: 999 } },
  { field: 'rate', type: 'number', format: '0.00', editable: true, editor: { type: 'number', min: 0, max: 1, step: 0.05 } },
  { field: 'rating', type: 'number', format: '0.0', editable: true, editor: { type: 'number', min: 0, max: 5, step: 0.5 } },
];

키보드와 마우스

키동작
↑ / ↓한 단계 위 / 아래(min~max 안에서 멈춤)
Shift + ↑ / ↓10단계
▲ / ▼ 버튼한 단계(키보드 포커스는 입력칸에 그대로)
Enter / Tab / Esc저장 후 이동 / 저장 후 다음 칸 / 취소

옵션

이름타입설명
min / maxnumber범위. 입력·붙여넣기·채우기 값이 범위를 벗어나면 '{min}~{max} 사이의 값을 입력하세요'(언어별) 안내와 함께 거부되고, validate()에도 나옵니다.
stepnumber한 단계 크기(기본 1). 소수 단계도 정확히 더합니다: 0.1 + 0.2는 0.3.

어디서나 적용되는 범위

  • 입력: 값이 맞을 때까지 편집기가 열린 채 셀 아래에 안내가 보입니다.
  • 붙여넣기·채우기 핸들: 범위 밖 값은 건너뛰어 셉니다.
  • validate()와 validateCell()이 범위 밖 셀을 알려 줍니다(유효성 검사 참고).
  • 한쪽만 줘도 됩니다: { min: 0 }은 "0~∞"로 안내합니다.