Curl Global Community
グリッド選択行の条件付き背景色制御 - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: グリッド選択行の条件付き背景色制御 (/showthread.php?tid=1273)



グリッド選択行の条件付き背景色制御 - kay - 11-09-2015

グリッドにおいて次のような背景色制御を行おうとしています。
1. データの変更有無、行の遇奇等による表示制御を行う
2. 現在選択している行は 1. に従わず、常に背景色を青にする
3. ただし、現在選択している行の内、現在選択しているセルの背景色は青にはせず 1. に従って制御を行う。

カスタム セル クラスの refresh-data で self.edit-active? を見て背景色を制御することで
概ね実現できたのですが、3. の仕様について、
フォーカスを得た後値を入力せずにフォーカス遷移した場合に正しく動作しませんでした。
・マウスで同じ行の別のセルを選択:1つ前に選択されていたセルの背景色が青に戻らない
・Tabでフォーカス移動:それまで選択されていたセルの背景色が青に戻らない
※ 値を入力してからフォーカスを移動した場合は正しく制御されます。


どのように修正したらよいでしょうか?

|| カスタム セル クラス
{define-class public AmountCell {inherits StandardStringCell}

...


{method public {refresh-data}:void
|| バッチイベント中は再描画しない
{if-non-null self.grid, self.grid.record-source then
{if self.grid.record-source.batch-events? then
{return}
}
}
|| 基底の処理
{super.refresh-data}

|| 再描画処理
{self.get-screen-for-grid}
{if self.screen == null then
{return}
}

{self.control-focus-acceptablity}
{self.control-bg-color} || このメソッドが背景色制御
{self.control-font}
}

...


||############################################################
|| 背景色制御
||############################################################
{method protected {control-bg-color}:void
{if not {self.ready-to-control?} then
{return}
}
let r:Record = self.grid.records[{self.screen.first-index-of-group self.record-index, {non-null self.record}}]
|| 選択行のルールは他の全てに優先する
{if {self.do-selected-background-control {non-null self.record}} == true then
{return}
}

set self.background = {Background.from-Color {self.do-base-background-control r}}
}

...


||############################################################
|| 選択行の背景色制御 (他のすべての制御に優先する)
||############################################################
{method protected {do-selected-background-control r:Record}:bool
|| self.record や self.screen の null チェックはこの中で行っている
{if not {self.ready-to-control?} then
{return false}
}
|| 現在選択されている行と同一グループの行は全て選択表示
{if self.group-selected? then
|| 選択されているセルは選択反転しない
{if self.edit-active? then

{return false}
}
set self.background = self.selected-background
{return true}
else
|| レコードグリッドの現在レコードが取得できなければ非選択として表示する
{return false}
}
}

...

}


RE: グリッド選択行の条件付き背景色制御 - kay - 11-09-2015


すみません、自己解決してしまいました。

カスタム セル クラスの note-grid-focus-out にてフォーカス アウト時にも背景色制御を行うようにしたところ、
意図した通りの動作になりました。

||############################################################
|| 選択されているセルの表示制御を反映する
||############################################################
{method public {note-grid-focus-out}:void
{super.note-grid-focus-out}
{self.control-bg-color}
{self.control-font}
}


ありがとうございました。