2016-10-26 2 views
1

Je crée mon propre DBGRid et il fonctionne correctement, à l'exception de la liste de sélection. Quel que soit le style de bouton défini pour la grille, il affiche toujours l'éditeur in-situ, ni la liste de sélection ni le bouton ellipse! .Problème de dbgrid et de liste de sélection personnalisé

je ne peux pas l'erreur que je fais ici :(est le code correspondant:

function TMyDBGrid.CreateEditor: TInplaceEdit; 

begin 
result:=TInplaceEdit.Create(self); 

end; 

function TMyDBGrid.GetEditStyle(ACol, ARow: integer): TEditStyle; 
begin 
case Columns[ACol].ButtonStyle of 
    cbsAuto : Result:=esPickList; 
    cbsNone : result:=esSimple; 
    cbsEllipsis : result:=esEllipsis; 
end; 
end; 

Et le constructeur et destructor il suffit d'appeler hérité, avec le constructeur réglage que quelques couleurs pour la grille.

Répondre

3

la raison pour laquelle il n'y a pas de liste de sélection ou le bouton est que vous utilisez un TInplaceEdit comme l'éditeur de cellule qui ne supporte pas la fonctionnalité dont vous avez besoin.

le TDBGrid utilise un TDBGridInplaceEdit qui hérite de TInplaceEditList comme éditeur de place qui intègre un TCustomListbox pour sa liste déroulante et peint et gère le bouton d'édition.

+0

mais il y a un problème: j'ai essayé d'utiliser TDBGridInplaceEdit, mais il est déclaré dans la partie implémentation de l'unité DBgrids. est-il possible de l'utiliser en plus de modifier la source Delphi? – DrWael

+0

@DrW - C'est en effet un problème. Vous pouvez essayer de dériver votre éditeur inplace à partir de TInplaceEditList, qui est plus proche du TGridInplaceEdit, et d'ajouter la fonctionnalité manquante en regardant la source VCL pour TGridInplaceEdit. Mais je ne suis pas sûr que ça marchera non plus, il y a des hard-casts dans la source dbgrid qui transforment l'éditeur en un TGridInplaceEdit. –

+0

Pensez à poser une question sur le problème que vous tentez de résoudre. Il peut y avoir d'autres façons de remplacer l'éditeur. –