作成日: 2018/12/03 最終更新日: 2019/02/06
文書種別
不具合
発生環境
Chrome以外のブラウザ(IE、Edge、FireFox)で発生
状況
修正済み
詳細
FlexGridにて、frozenRowsプロパティを設定して行を固定した場合、グリッドをスクロールしたあとに、固定側のセルが選択できません。
回避方法
この問題はバージョン5.20183.568で修正されました。
修正版を適用しない場合の回避方法は次の通りです。
以下のコードで回避できます。ただし、以下の制限があります。
------------------------------------------------------------
固定行のセルを選択して、そのままマウスボタンを押しながらグリッドの下のほうにマウスを移動した場合、本来の動作としてはグリッドがスクロールして選択範囲も広がります。
しかし、この回避策では基底のマウス処理をキャンセルしているため、グリッドはスクロールしません。
------------------------------------------------------------
【JavaScript】
var startPos = {row: 0, col: 0};
var selectionStart = false;
var isStartEdit = false;
grid.addEventListener(grid.hostElement, 'mousedown', function(e){
// セルが編集中の場合は処理を抜けます
if (grid.editRange != null) return true;
//クリックしたセル位置を取得します
var ht = grid.hitTest(e.pageX, e.pageY);
//固定行内のセルの場合
if (ht.cellType == 1 && ht.row < grid.frozenRows){
//コントロールの既定の動作をキャンセルします
e.preventDefault();
//選択を開始したセルの位置を保存します
startPos.row = ht.row;
startPos.col = ht.col;
//固定行内のセルで選択が開始された
selectionStart = true;
if (grid.selection.isSingleCell && grid.selection.row == ht.row && grid.selection.col == ht.col){
isStartEdit = true;
}
else{
//クリックしたセルを選択します
grid.select(ht.row, ht.col);
}
}
}, true, false);
grid.addEventListener(grid.hostElement, 'mousemove', function(e){
//固定行内のセルで選択が開始された場合
if (selectionStart && e.buttons == 1){
//コントロールの既定の動作をキャンセルします
e.preventDefault();
//マウス位置にあるセルを取得します
var ht = grid.hitTest(e.pageX, e.pageY);
if (wijmo.grid.CellType[ht.cellType] == 'Cell'){
//マウス位置に合わせてセルの選択範囲を設定します
grid.select(new wijmo.grid.CellRange(startPos.row, startPos.col, ht.row, ht.col), true);
}
}
}, true, false);
grid.addEventListener(grid.hostElement, 'mouseup', function(e){
if (isStartEdit){
//コントロールの既定の動作をキャンセルします
e.preventDefault();
if (grid.selection.isSingleCell && grid.selection.row == startPos.row && grid.selection.col == startPos.col){
//すでに選択中の場合は、セルの編集を開始します
if (!grid.isReadOnly && !grid.rows[startPos.row].isReadOnly && !grid.columns[startPos.col].isReadOnly){
grid.startEditing(true, startPos.row, startPos.col);
}
}
}
selectionStart = false;
isStartEdit = false;
}, true, false);
document.onmouseup = function(){
selectionStart = false;
isStartEdit = false;
}
修正版を適用しない場合の回避方法は次の通りです。
以下のコードで回避できます。ただし、以下の制限があります。
------------------------------------------------------------
固定行のセルを選択して、そのままマウスボタンを押しながらグリッドの下のほうにマウスを移動した場合、本来の動作としてはグリッドがスクロールして選択範囲も広がります。
しかし、この回避策では基底のマウス処理をキャンセルしているため、グリッドはスクロールしません。
------------------------------------------------------------
【JavaScript】
var startPos = {row: 0, col: 0};
var selectionStart = false;
var isStartEdit = false;
grid.addEventListener(grid.hostElement, 'mousedown', function(e){
// セルが編集中の場合は処理を抜けます
if (grid.editRange != null) return true;
//クリックしたセル位置を取得します
var ht = grid.hitTest(e.pageX, e.pageY);
//固定行内のセルの場合
if (ht.cellType == 1 && ht.row < grid.frozenRows){
//コントロールの既定の動作をキャンセルします
e.preventDefault();
//選択を開始したセルの位置を保存します
startPos.row = ht.row;
startPos.col = ht.col;
//固定行内のセルで選択が開始された
selectionStart = true;
if (grid.selection.isSingleCell && grid.selection.row == ht.row && grid.selection.col == ht.col){
isStartEdit = true;
}
else{
//クリックしたセルを選択します
grid.select(ht.row, ht.col);
}
}
}, true, false);
grid.addEventListener(grid.hostElement, 'mousemove', function(e){
//固定行内のセルで選択が開始された場合
if (selectionStart && e.buttons == 1){
//コントロールの既定の動作をキャンセルします
e.preventDefault();
//マウス位置にあるセルを取得します
var ht = grid.hitTest(e.pageX, e.pageY);
if (wijmo.grid.CellType[ht.cellType] == 'Cell'){
//マウス位置に合わせてセルの選択範囲を設定します
grid.select(new wijmo.grid.CellRange(startPos.row, startPos.col, ht.row, ht.col), true);
}
}
}, true, false);
grid.addEventListener(grid.hostElement, 'mouseup', function(e){
if (isStartEdit){
//コントロールの既定の動作をキャンセルします
e.preventDefault();
if (grid.selection.isSingleCell && grid.selection.row == startPos.row && grid.selection.col == startPos.col){
//すでに選択中の場合は、セルの編集を開始します
if (!grid.isReadOnly && !grid.rows[startPos.row].isReadOnly && !grid.columns[startPos.col].isReadOnly){
grid.startEditing(true, startPos.row, startPos.col);
}
}
}
selectionStart = false;
isStartEdit = false;
}, true, false);
document.onmouseup = function(){
selectionStart = false;
isStartEdit = false;
}
旧文書番号
83439