Zur cDbCJGridSelectColumn von Allan Kim Eriksen (Post) habe ich hier eine cDbCJGrid erweitert, damit diese die Mausklicks in eine beliebige Spalte der Zeile an die SelectColumn weiter gibt.
Mir hatte es nicht so sehr gefallen, dass man immer direkt auf die Checkboxen klicken musste, anstatt einfach in die Zeile zu klicken oder über die Leertaste das Häkchen zu setzen.

cMultiSelectdbCJGrid.pkg
Code:
Use cDbCJGrid.pkg

Class cMultiSelectdbCJGrid is a cDbCJGrid
    
   Procedure Construct_Object
      Forward Send Construct_Object
      //piGridSelectColumn wird auf die Spalte (von 0 beginnend) gesetzt, 
      //die eine cDbCJGridSelectColumn ist. Über OnComMouseUp wird dafr gesorgt,
      //das jeder Mausklick in eine Spalte diese Multiselectspalte ausl”st
      { Visibility = Private}
      Property Integer piGridSelectColum (-1)
   End_Procedure
   
   { MethodType=Property InitialValue=-1 }
   { Category=Behavior PropertyType=Integer }
   Procedure Set piGridSelectColumnNumber Integer iColumn
      //piGridSelectColumn wird auf die Spalte (von 0 beginnend) gesetzt, 
      //die eine cDbCJGridSelectColumn ist. Über OnComMouseUp wird dafür gesorgt,
      //das jeder Mausklick in eine Spalte diese Multiselectspalte auslöst
      Set piGridSelectColum to iColumn
   End_Procedure

   Procedure End_Construct_Object
		//Verschieben oder Entfernen von Spalten darf nicht möglich sein,
		//da die Property über die cDbCJGridSelectColumn nicht mit aktualisiert würde
      Integer iGridSelectColumnNumber
      Get piGridSelectColum to iGridSelectColumnNumber
      If (iGridSelectColumnNumber=(-1)) Begin
         Set pbAllowColumnRemove  to False
			Set pbAllowColumnReorder to False
      End
      Forward Send End_Construct_Object
   End_Procedure
   
   {Visibility = Private}
   Procedure OnComMouseUp Short llButton Short llShift Integer llx Integer lly
      Integer iSelectedRow iGridSelectColumnNumber
      Handle hoDataSource
      
      Forward Send OnComMouseUp llButton llShift llx lly
      
      Get piGridSelectColum to iGridSelectColumnNumber
      If (iGridSelectColumnNumber<>(-1)) Begin
         Get phoDataSource to hoDataSource
         Get SelectedRow of hoDataSource to iSelectedRow
         
         Send NotifyItemChecked iSelectedRow iGridSelectColumnNumber
         Send ComRedraw
      End
   End_Procedure
   
   {Visibility = Private}
   Procedure Key Integer iKeyValue Returns Integer
      Boolean bReadonly bEditable
      Integer iGridSelectColumnNumber iRet iSelectedRow
      Handle hoDataSource
      Get pbReadOnly to bReadonly
      Get pbAllowEdit to bEditable
      Get piGridSelectColum to iGridSelectColumnNumber
      If (iGridSelectColumnNumber<>(-1) and (bReadonly or not(bEditable))) Begin
         If (iKeyValue=KEY_SPACE) Begin
            Get phoDataSource to hoDataSource
            Get SelectedRow of hoDataSource to iSelectedRow
            
            Send NotifyItemChecked iSelectedRow iGridSelectColumnNumber
            Send ComRedraw
         End
      End
      Else Begin
         Forward Send Key iKeyValue
      End
   End_Procedure

End_Class
Ich hoffe mal, das sie jemand gebrauchen kann