📘

GeneXus Gridの行背景色をクリアする方法

2023/02/17に公開
記事投稿経緯

2023.02.17 Zennへ記載サイト移行
2021.06.28 Qiitaへ投稿

本記事について

GeneXusの実装においてGrid(一覧表示コントロール)を用いる際、
特定の条件で背景色を変更したい場合の実装方法について記載する。

前提条件あり

今回紹介する「BackColor」プロパティは以下の通り優先度と利用条件があるので実際に試す場合は注意してください。

≪公式wiki引用≫
このプロパティの優先度は、 [ Background ] プロパティよりも低く設定されています。
たとえば、背景を指定した場合は、背景色を指定しても無視されます。
このプロパティは、 [ BackColorStyle ] プロパティの値が [ Uniform ] の場合にのみ適用されます。

公式wikiサイトはこちら『BackColor』
公式wikiサイトはこちら『BackColorStyle』

「<ControlName>.BackColor」プロパティの使用方法

グリッドにて、任意の条件で対象行の背景色を変更したい場合、

コントロール名.BackColor = RGB(150, 150, 150)

と記述することができる。

その場合、以下の様に対象条件以外の場合も記述しないといけない。
※前行で設定した設定内容を後続業も引き継ぐ為。

If 条件
    コントロール名.BackColor = RGB(150, 150, 150)
else
    コントロール名.BackColor = RGB(255, 255, 255)
EndIf

そこで問題が発生する
 ①レポート表示(偶数行だけ色を変える)
 ②フォーカスハイライト
を設定している場合、コントロール名.BackColor = RGB(255, 255, 255)の定義が
①②の設定を上書きしてしまう。

その対処として以下の様にRGB関数ではなく負数を適用させる

If 条件
    コントロール名.BackColor = RGB(150, 150, 150)
else
    コントロール名.BackColor = -1
EndIf

ひと工夫してみる

ちなみに、RGBだと共通化ができない
(変数や項目属性を指定できないことは実際に試してみるとわかる)

&rVal = 150
&gVal = 150
&bVal = 150
If 条件
    コントロール名.BackColor = RGB(&rVal, &gVal, &bVal) // この記載は構文エラーとなる
else
    コントロール名.BackColor = -1
EndIf

その為、各画面で定義する必要がある。
保守性が低いのでRGBを使用しない方法を検討した方が良いかもしれない。
※「そもそもCSSを使おうよ」という視点はちょっと置いておく。

・RGBはそもそも数値(最大8桁)を返す関数ことを考慮し
 ①RGBが返す値(A)を確認
 ②(A)をドメインに設定
 ③「コントロール名.BackColor = <②の値>」として実装

最後に...

数少ない「GeneXus」エンジニアへ有益な情報になりますように。

Discussion