作成日: 2023/02/03 最終更新日: 2023/10/03
文書種別
仕様
状況
回避方法あり
詳細
連結モードのC1FlexGridで、SelectionModeをListBoxに設定し、マウスドラッグまたはShiftキーを押して複数行を選択します。
そのあと(ボタンクリック等で)以下のコードを実行すると、複数行の選択が解除され、カレント行のみが選択状態になります。
◎サンプルコード(VB)
(メモ)
・Ctrlキーを押しながらマウスクリックで複数行を選択した場合は、現象は発生しません。
・SelectionMode=RowRangeの場合でも同じ結果になります。
(2023.10.03 更新)
・文書種別を「不具合」⇒「仕様」に変更
・状況を「現象確認済み」⇒「回避方法あり」に変更
・回避方法を追加
そのあと(ボタンクリック等で)以下のコードを実行すると、複数行の選択が解除され、カレント行のみが選択状態になります。
◎サンプルコード(VB)
CType(C1FlexGrid1.DataSource, DataTable).AcceptChanges()
◎サンプルコード(C#)
((DataTable)Grid.DataSource).AcceptChanges();
(メモ)
・Ctrlキーを押しながらマウスクリックで複数行を選択した場合は、現象は発生しません。
・SelectionMode=RowRangeの場合でも同じ結果になります。
(2023.10.03 更新)
・文書種別を「不具合」⇒「仕様」に変更
・状況を「現象確認済み」⇒「回避方法あり」に変更
・回避方法を追加
回避方法
以下のように、AcceptChanges メソッドが呼び出される前に選択した行を保存してから、選択範囲を再度保存することで回避が可能です。 ◎サンプルコード(VB)
Dim lastSelected As RowColCollection = C1FlexGrid1.Rows.Selected '追加
CType(C1FlexGrid1.DataSource, DataTable).AcceptChanges()
Enumerable.ToList(Of Row)(lastSelected.Cast(Of Row)()).ForEach(Sub(x) x.Selected = True) '追加
◎サンプルコード(C#)
var lastSelected = c1FlexGrid1.Rows.Selected; //追加
((DataTable)c1FlexGrid1.DataSource).AcceptChanges();
lastSelected.Cast().ToList().ForEach(x = x.Selected = true); //追加