2017-02-28 24 views
0

特定のフィールドの一致を確認するためにフォームのデータソースに表示方法を作成しました。同じ値の2つがある場合は、フォームの特定の行に背景色を付ける必要があります。背景色行

以下のコードの問題は、1行のレコードだけが一致する場合でも、フォームのすべての行に背景色が与えられることです。

私は間違っていますか?

public void displayOption(Common _record, FormRowDisplayOption _options) 
    { 
     SalesLine salesLineLocal; 
     ; 

     salesLineLocal = _record; 

     while select salesLineLocal 
      where salesLineLocal.SerialId == salesLine.SerialId 

     if(salesLineLocal.RecId != SalesLine.RecId) 
     { 
       _options.backColor(Winapi::RGB2int(251,181,251)); 

     } 
    } 

答えて

3

これが正常に動作します、次のようにあなたの方法を変更します。

public void displayOption(Common _record, FormRowDisplayOption _options) 
{ 
    SalesLine salesLineCurrent; 
    SalesLine salesLineLocal; 
    ; 

    salesLineCurrent = _record; 

    select firstOnly RecId from salesLineLocal 
     where salesLineLocal.SerialId == salesLineCurrent.SerialId 
      && salesLineLocal.RecId != salesLineCurrent.RecId; 

    if (salesLineLocal.RecId) 
    { 
     _options.backColor(Winapi::RGB2int(251,181,251)); 
    } 

    super(_record, _options); 
} 

しかし、あなたはそれを改善希望の場合は、テーブルレベルで検証ロジックを移動することができます。 SalesLineテーブルの上に方法

public boolean hasDupplicate() 
{ 
    SalesLine salesLine; 
    ; 

    select firstOnly RecId from salesLine 
     where salesLine.SerialId == this.SerialId 
      && salesLine.RecId != this.RecId; 

    return salesLine.RecId != 0 
} 

を作成する次に、あなたのdisplayOption方法は

public void displayOption(Common _record, FormRowDisplayOption _options) 
{ 
    SalesLine salesLineLocal; 
    ; 

    salesLineLocal = _record; 

    if (salesLineLocal.hasDupplicate()) 
    { 
     _options.backColor(Winapi::RGB2int(251,181,251)); 
    } 

    super(_record, _options); 
} 
+0

のようになります。あなたの明確な答えAliaksandrいただきありがとうございます!それは完璧に動作します! firstOnly SerialIdを選択するためにselect firstOnly RecIdを変更しただけなので、空のシリアルID行は選択されません。再度、感謝します。 –