作成日: 2026/01/15 最終更新日: 2026/05/13
文書種別
不具合
発生環境
5.20242.21以降で発生
状況
修正済み
詳細
グリッドがページの表示領域の外にあるとき、selectメソッドを新しい選択範囲が画面に入るようにスクロールするかどうかを示すオプション引数をtrueに設定して実行しても、ページ全体のスクロール位置が移動せず、新しい選択範囲が表示外のままとなります。
回避方法
この問題はバージョン5.20261.50で修正されました。
修正版を適用しない場合の回避方法は次の通りです。
以下のように、独自メソッド scrollSelectedCellIntoView を追加して、selectの後に呼び出すことで、選択したセルが表示されていない場合にページをスクロールさせます。
ただし、この方法には以下の制限事項があります。
- 主にプログラムによる選択を想定しており、通常のクリック操作による選択には対応していません。
- select が呼び出されるすべての箇所で適用する必要があります。
- グリッドが入れ子になったスクロールコンテナー内にある場合(親要素にoverflow: autoが設定されている場合)、正常に動作しない可能性があります。
- select を頻繁に呼び出すと、パフォーマンスにわずかな影響が生じる可能性があります。
function scrollSelectedCellIntoView(grid) {
// 選択範囲を取得
var selection = grid.selection;
if (!selection || selection.row < 0 || selection.col < 0) {
return; // 有効な選択がありません
}
// セル要素を取得
var cellElement = grid.cells.getCellElement(selection.row, selection.col);
if (!cellElement) {
return; // セル要素が見つかりません
}
// セルがビューポートの外にあるかどうかを確認
var rect = cellElement.getBoundingClientRect();
var viewportHeight = window.innerHeight || document.documentElement.clientHeight;
var viewportWidth = window.innerWidth || document.documentElement.clientWidth;
var isVisible = (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= viewportHeight &&
rect.right <= viewportWidth
);
if (!isVisible) {
// セルがビューポート外にあるため、スクロールして表示します
// スムーズスクロールと配置のオプションを指定して scrollIntoView を使用します
cellElement.scrollIntoView({
behavior: 'auto',
block: 'center', // ビューポート内のセルを垂直中央に配置する
inline: 'center' // ビューポート内のセルを水平方向に中央揃えする
});
}
}
function doSelect() {
theGrid.select(new wijmo.grid.CellRange(0, 1), true);
// 回避方法:selectの後にscrollSelectedCellIntoView を実行
setTimeout(function () {
scrollSelectedCellIntoView(theGrid);
}, 50); // 選択を確実に適用するための小さな遅延
}