PDA

View Full Version : Multiselect über alle Spalten in dynamischem cDbCJGrid



GhostShotIV
22-Feb-2011, 09:53 AM
Zur cDbCJGridSelectColumn von Allan Kim Eriksen (Post (http://support.dataaccess.com/Forums/showthread.php?44679-Multi-select-records-i-a-dynamic-cDbCJGrid-cDbCJGridPromptList&p=218329#post218329)) 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.

4113

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

Peter van Mil
25-May-2015, 08:47 AM
Vielleicht ist es ein bisschen spät, aber ich finde es eine große Verbesserung gegenüber dem ursprünglichen Multi Select cDbCJGrid. Danke dafür.