2010-06-09 11 views
0

Est-ce que nybody sait comment limiter le nombre de lignes que l'utilisateur peut sélectionner dans un cxGrid où MultiSelect est actif?Limite des lignes sélectionnables pour MultiSelect dans cxGrid (Developer Express)

La grille fonctionne en GridMode = True - car la quantité de données est vraiment importante (200 000 lignes). - Maintenant, si vous appuyez sur CTRL + A toutes les lignes sont chargées car la grille veut les sélectionner toutes.

Des conseils?

Merci

+1

Salut, JPS! Bienvenue à StackOverflow. Bonne question, aussi. Celui-ci a l'air d'être un doozy. La grille CX est l'une des pièces de lasagne les plus effrayantes que j'ai jamais eu à travailler, et il est pratiquement impossible de faire quelque chose d'utile sans creuser une tonne de code source pour essayer de trouver la fonctionnalité réelle. –

+2

Lasagne? Plus comme un panier plein d'oignons - beaucoup d'objets différents, vous pouvez décoller couche après couche, et parfois vous avez envie de pleurer. ;-) –

+0

cxDBData.pas: procédure TcxDBDataSelection.SelectAll; C'est là que l'action est .. et en regardant la boucle je pense qu'il n'y a pas d'événement qui peut annuler le chargement de toutes les lignes. - Peut-être qu'un avortement dans l'événement canselectrow va t'aider, je te le dirai. – JPS

Répondre

0

Une façon serait de désactiver Ctrl-A dans votre formulaire en créant un raccourci qui préempter il. Juste une idée, mais ça devrait marcher.

+0

Ceci est certainement un travail, mais puisque j'essaie de créer un composant (forme dérivée cxgrid) que nous pouvons utiliser n'importe où dans notre application, je voudrais vraiment trouver un moyen de résoudre ce problème dans le composant. – JPS

1

Essayez ceci dans votre événement CanSelectRecord -

if Sender.Controller.SelectedRecordCount > x then 
    AAllow := False; 

Où 'x' est la limite que vous voulez.

+0

En Gridmode False cela fonctionne parfaitement (mais n'est pas nécessaire car strg + a n'est pas un problème) - maintenant en Gridmode True l'événement est encore appelé très souvent (je suppose chaque ligne) mais "SelectedRecordCount" reste tristement à Zero constamment. Encore l'événement pourrait être un bon point de départ. Peut-être que je trouve un compteur qui monte quelque part dans la structure de données - ou je pourrais commencer mon propre comptage quand strg + a est pressé. – JPS

+0

Je viens de faire mon propre comptage dans l'événement .. il ne sera pas guérir le problème, car oui, je peux interdire la sélection de chaque rangée. - Mais cela n'arrête pas le processus de sélection. - Le cxGrid continue à parcourir toutes les lignes et essaie de les sélectionner. (Donc, tout est chargé et cela prend une éternité) – JPS