Roman Köhler
11-Aug-2011, 10:56 AM
Hallo,
ich versuche gerade die cDbCJGridColumn an meine Bedürfnisse anzupassen. Im Moment arbeite ich daren, ganze Zeilen, in Abhängigkeit bestimmter Werte in dieser Zeile (in einer beliebigen Spalte) einzufärben.
D.h. Ist der Betrag >= 100, soll die Schrift rot werden. Ist auf Objektebene auch ganz einfach, ich möchte aber eine columnKlasse schaffen, in welcher der Vergleich ganz allgemein definiert wird.
Die folgenden Beispiele basieren auf der Order.vw
1. Beispiel funktioniert auf Objektebene:
In diesem Beispiel wird die Schrift rot, wenn der Wert der Spalte 'oOrderDtl_Extended_Price' < 100 ist.
Object OrderDtl_DD is a OrderDtl_DataDictionary
Set DDO_Server to OrderHea_DD
Set DDO_Server to Invt_DD
Set Constrain_File to OrderHea.File_Number
Function Schriftfarbe String sValue Returns String
If (sValue >= 100) Function_Return clBlack
Else Function_Return clRed
End_Function
End_Object // OrderDtl_DD
...
Object oInvt_Item_ID is a cDbCJGridColumn
Entry_Item Invt.Item_ID
Set piWidth to 90
Set psCaption to "Item ID"
Set psImage to "ActionPrompt.ico"
Procedure OnSetDisplayMetrics Handle hoGridItemMetrics Integer iRow String sValue
Number nPrice
String sCellValue
Get RowValue of oOrderDtl_Extended_Price iRow to sCellValue
Set ComForeColor of hoGridItemMetrics to (Schriftfarbe(OrderDtl_DD, sCellValue))
End_Procedure
End_Object
2. Jetzt versuche ich das Ganze in eine Klasse zu schreiben.
D.h. ich muss alle fsten Objektbezeichnungen variabel machen. In diesem Fall z.B. 'oOrderDtl_Extended_Price'
Das sieht bei mir so aus:
Class mycDbCJGridColumn is a cDbCJGridColumn
Procedure Construct_Object
Forward Send Construct_Object
Property Handle phObjectIDToCompare
End_Procedure
Procedure OnSetDisplayMetrics Handle hoGridItemMetrics Integer iRow String sValue
String sCellValue
Handle hObjectIDToCompare
Move (phObjectIDToCompare(Self)) to hObjectIDToCompare
Get RowValue of hObjectIDToCompare iRow to sCellValue
Set ComForeColor of hoGridItemMetrics to (Zeilenfarbe(OrderDtl_DD, sCellValue))
End_Procedure
End_Class
Object oInvt_Description is a mycDbCJGridColumn
Entry_Item Invt.Description
Set piWidth to 211
Set psCaption to "Description"
Set phObjectIDToCompare to (oOrderDtl_Extended_Price(Self))
End_Object
Nun bringt mir aber das Programm genau an der ersetzten Stelle einen Fehler:
Get RowValue of hObjectIDToCompare iRow to sCellValue
Hat jemand eine Idee, wie ich eine Objektbezeichnung in einer Property speichern kann, um sie später abzurufen?
Komme irgendwie nicht weiter.
Vielen Dank schonmal im Voraus.
Roman
ich versuche gerade die cDbCJGridColumn an meine Bedürfnisse anzupassen. Im Moment arbeite ich daren, ganze Zeilen, in Abhängigkeit bestimmter Werte in dieser Zeile (in einer beliebigen Spalte) einzufärben.
D.h. Ist der Betrag >= 100, soll die Schrift rot werden. Ist auf Objektebene auch ganz einfach, ich möchte aber eine columnKlasse schaffen, in welcher der Vergleich ganz allgemein definiert wird.
Die folgenden Beispiele basieren auf der Order.vw
1. Beispiel funktioniert auf Objektebene:
In diesem Beispiel wird die Schrift rot, wenn der Wert der Spalte 'oOrderDtl_Extended_Price' < 100 ist.
Object OrderDtl_DD is a OrderDtl_DataDictionary
Set DDO_Server to OrderHea_DD
Set DDO_Server to Invt_DD
Set Constrain_File to OrderHea.File_Number
Function Schriftfarbe String sValue Returns String
If (sValue >= 100) Function_Return clBlack
Else Function_Return clRed
End_Function
End_Object // OrderDtl_DD
...
Object oInvt_Item_ID is a cDbCJGridColumn
Entry_Item Invt.Item_ID
Set piWidth to 90
Set psCaption to "Item ID"
Set psImage to "ActionPrompt.ico"
Procedure OnSetDisplayMetrics Handle hoGridItemMetrics Integer iRow String sValue
Number nPrice
String sCellValue
Get RowValue of oOrderDtl_Extended_Price iRow to sCellValue
Set ComForeColor of hoGridItemMetrics to (Schriftfarbe(OrderDtl_DD, sCellValue))
End_Procedure
End_Object
2. Jetzt versuche ich das Ganze in eine Klasse zu schreiben.
D.h. ich muss alle fsten Objektbezeichnungen variabel machen. In diesem Fall z.B. 'oOrderDtl_Extended_Price'
Das sieht bei mir so aus:
Class mycDbCJGridColumn is a cDbCJGridColumn
Procedure Construct_Object
Forward Send Construct_Object
Property Handle phObjectIDToCompare
End_Procedure
Procedure OnSetDisplayMetrics Handle hoGridItemMetrics Integer iRow String sValue
String sCellValue
Handle hObjectIDToCompare
Move (phObjectIDToCompare(Self)) to hObjectIDToCompare
Get RowValue of hObjectIDToCompare iRow to sCellValue
Set ComForeColor of hoGridItemMetrics to (Zeilenfarbe(OrderDtl_DD, sCellValue))
End_Procedure
End_Class
Object oInvt_Description is a mycDbCJGridColumn
Entry_Item Invt.Description
Set piWidth to 211
Set psCaption to "Description"
Set phObjectIDToCompare to (oOrderDtl_Extended_Price(Self))
End_Object
Nun bringt mir aber das Programm genau an der ersetzten Stelle einen Fehler:
Get RowValue of hObjectIDToCompare iRow to sCellValue
Hat jemand eine Idee, wie ich eine Objektbezeichnung in einer Property speichern kann, um sie später abzurufen?
Komme irgendwie nicht weiter.
Vielen Dank schonmal im Voraus.
Roman