Hi Ezequiel

Try the attached class. It has support for images added. I have just merged some of the changes I have that have not made it into public release yet.

cSigCJReportControl.pkg

I have not compiled or tested this.


  1. You will need to added code in OnCreate to load the images
  2. Set the column style to eRC_Image
  3. Code OnImagePath to return the image ID


Code:
                Procedure OnCreate
                    Integer iImageID

                    //Add Icons to image manager
                    Get AddImage of ghoSigCjGlobalSetting (psBitmapPath(phoWorkspace(ghoApplication)) + "\Round_Green_Tick_16.ico") 0 OLExtpImageNormal to iImageID
                    Set piIcon_Allowed to iImageID

                    Get AddImage of ghoSigCjGlobalSetting (psBitmapPath(phoWorkspace(ghoApplication)) + "\Round_Red_Minus_16.ico") 0 OLExtpImageNormal to iImageID
                    Set piIcon_Denied to iImageID

                    Get AddImage of ghoSigCjGlobalSetting (psBitmapPath(phoWorkspace(ghoApplication)) + "\Round_Grey_Minus_16.ico") 0 OLExtpImageNormal to iImageID
                    Set piIcon_Disabled to iImageID

                    Forward Send OnCreate

                    Set ComAllowColumnReOrder to False
                    Set ComAllowColumnRemove to False
                    Set ComRecordsTreeFilterMode to OLExtpReportFilterTreeByParentAndChildren
                End_Procedure

                //---------------------------------------------------------------------

                Procedure OnDefine_Columns
                    Send Add_Report_Column "ID"              0 eRC_Integer eRC_Standard ""
                    Send Add_Report_Column "Component"     200 eRC_String  eRC_Standard ""
                    Send Add_Report_Column "Access"         50 eRC_String  eRC_Image    ""
                    Send Add_Report_Column "Description"   200 eRC_String  eRC_Standard ""
                End_Procedure

                //-------------------------------------------------------------

                //Pass back image info based on report column value
                Procedure OnImagePath Integer iColumn Integer ByRef iImageId String ByRef sValue
                    Get piIcon_Denied to iImageId
                    If (sValue = "X") Get piIcon_Disabled to iImageId
                    If (sValue = "Y") Get piIcon_Allowed  to iImageId
                End_Procedure

You can also set one of the columns to be a tree column. peDb_Type must be eRC_db_Text for this to work as you will need to manual load the data and create the child records. Only the parent most records are loaded via OnPrepare_RowData, all the child records are created in OnCreateRowItem. Again, this example code has just been hacked from an application - not compiled or tested, but should be enough for you to adapt for your application. All of the data is preloaded into a recursive structure in OnOpen_DataSource

Code:
Struct tdUser_Security
    Integer iComponent_URN
    String  sAllow_Access
    String  sComponent_Name
    String  sComponent_Description
    tdUser_Security[] taChild_Components
End_Struct
Code:
                //Set the Tree Column
                Procedure OnCreateColumn Integer iColumn Handle hoCol
                    If (iColumn = 1) Begin
                        Set ComTreeColumn of hoCol to True
                    End
                End_Procedure

                //Add Icon column
                Procedure Add_Item_Icon Handle hoRecord String sValue
                    Handle  hoItem
                    Integer iImageId
                    Variant vItem vImage

                    Get phoReportRecordItem to hoItem
                    Get ComAddItem of hoRecord sValue to vItem
                    Set pvComObject of hoItem to vItem

                    Get piIcon_Denied to iImageId
                    If (sValue = "X") Get piIcon_Disabled to iImageId
                    If (sValue = "Y") Get piIcon_Allowed  to iImageId

                    Get ImageFromId of ghoSigCjGlobalSetting iImageId to vImage
                    If (not(IsNullComObject(vImage))) Begin
                        Set ComAlignment   of hoItem to OLExtpAlignmentIconCenter
                        Set ComIcon        of hoItem to iImageId
                        Set ComCaption     of hoItem to " "     // This stops the value from being shown
                    End
                End_Procedure

                //Add child items to a report item
                Procedure Add_Child_Records Handle hoRecords tdUser_Security[] taGrid_Data
                    Handle hoRecord hoChild_Records
                    Variant vItem
                    Integer iIndex iMax

                    Get Create U_cSigCJComReportRecord to hoRecord

                    Move (SizeOfArray(taGrid_Data) - 1) to iMax
                    For iIndex from 0 to iMax
                        Set pvComObject of hoRecord to (ComAdd(hoRecords))

                        Get ComAddItem of hoRecord taGrid_Data[iIndex].iComponent_ID          to vItem
                        Get ComAddItem of hoRecord taGrid_Data[iIndex].sComponent_Name        to vItem
                        Send Add_Item_Icon hoRecord taGrid_Data[iIndex].sAllow_Access
                        Get ComAddItem of hoRecord taGrid_Data[iIndex].sComponent_Description to vItem

                        Set ComTag of hoRecord to taGrid_Data[iIndex].iComponent_URN

                        //CAUTION : Recursive call : CAUTION
                        If (SizeOfArray(taGrid_Data[iIndex].taChild_Components) > 0) Begin
                            Get Create U_cSigCJComReportRecords to hoChild_Records
                                Set pvComObject of hoChild_Records to (ComChilds(hoRecord))
                                Send Add_Child_Records hoChild_Records taGrid_Data[iIndex].taChild_Components
                            Send Destroy of hoChild_Records
                        End
                    Loop

                    Send Destroy of hoRecord
                End_Procedure

                //Use OnCreateRowItem to add additional child records. We don't
                //need to do this every time the event is called, simply once
                //per row so we wait until the passed column is the last one in
                //the row (iColumn = piColumn_Count)
                Procedure OnCreateRowItem Integer iColumn Handle hoItem String sValue
                    Handle hoChild_Records
                    Integer iIndex
                    tdUser_Security[] taGrid_Data

                    If (iColumn = piColumn_Count(Self)) Begin
                        Get piCh_No to iIndex
                        Decrement iIndex    //Need to decrement as it has already been incremented
                        Get ptaGrid_Data to taGrid_Data
                        If (SizeOfArray(taGrid_Data[iIndex].taChild_Components) > 0) Begin
                            Get Create U_cSigCJComReportRecords to hoChild_Records
                                Set pvComObject of hoChild_Records to (ComChilds(phoReportRecord(Self)))
                                Send Add_Child_Records hoChild_Records taGrid_Data[iIndex].taChild_Components
                            Send Destroy of hoChild_Records
                        End
                    End
                End_Procedure