Wijmo CollectionView 型の検証
by Wijmo5_jp
HTML
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdn.grapecity.com/wijmo/5.latest/styles/wijmo.min.css">
<script src="https://cdn.grapecity.com/wijmo/5.latest/controls/wijmo.min.js"></script>
<script src="https://cdn.grapecity.com/wijmo/5.latest/controls/cultures/wijmo.culture.ja.min.js"></script>
<script src="https://cdn.grapecity.com/wijmo/5.latest/controls/wijmo.grid.min.js"></script>
<div class="container-fluid">
<p>日付や数値の列に異なる型の値を入力するか、2/30などの不正な日付を入力すると、検証エラーを表示します。</p>
<label><input type="checkbox" id="showParseError" checked> 不正な型/値を入力時に検証エラーを表示</label><br>
<div id="flexGrid"></div>
</div>
CSS
body {
margin: 50px 0;
}
JavaScript
document.readyState === 'complete' ? init() : window.onload = init;
function init() {
var view = new wijmo.collections.CollectionView(getData(5), {
getError: function (item, prop, parsing) {
var showParseError = document.getElementById('showParseError').checked;
// 文字列を指定した型に変換する際にエラーが発生した場合
if (parsing && showParseError) {
if (prop == '受注日') {
return '正しい日付を入力してください';
} else if (prop == '金額') {
return '正しい数値を入力してください';
}
}
// 正しい型の値が入力された場合
if (prop == '受注日' && item.受注日 > new Date()) {
return '本日以前の日付を入力してください';
} else if (prop == '金額' && item.金額 <= 0) {
return '正数を入力してください';
}
}
});
var flexGrid = new wijmo.grid.FlexGrid('#flexGrid', {
itemsSource: view,
columns: [
{ binding: '商品名', width: 200 },
{ binding: '受注日', width: 120 },
{ binding: '金額', format: 'c', width: 100 }
]
});
}
var productNames = ['果汁100%オレンジ', '果汁100%グレープ', '果汁100%レモン', '果汁100%ピーチ', 'コーヒーマイルド', 'コーヒービター', 'コーヒーミルク', 'ピリピリビール', 'オタル白ラベル', 'バードワイン'];
function random(max, min) {
if (!min) min = 0;
return Math.floor(Math.random() * (max - min)) + min;
}
function randomDate() {
let date = new Date((new Date()).getFullYear() - 5, 3, 1);
return wijmo.DateTime.addDays(date, random(365 * 5));
}
function getData(length) {
let data = [];
for (let i = 0; i < length; i++) {
data.push({
No: i,
商品名: productNames[random(productNames.length)],
受注日: randomDate(),
金額: random(99, 1) * 100,
値引: random(3) == 0
});
}
return data;
}