Une colonne combobox datagridview affecte-t-elle la vitesse lors de sa validation dans la database?

J'ai un formulaire nommé, frmTransaction, qui a txtTranNo, txtCustCode, dtbDate, txtRemarks, txtTotalAmount, et a un datagridview nommé, dtgDetail.

Sur le dtgDetail, j'ai les colonnes cTranNo, nLineID, cProductID, nQty, nPrice et nAmount.

cProductID est une colonne de list déroulante qui a un cProduct datamember et un cDescription displaymember, de sorte que lorsqu'il est en cours d'exécution, l'user verra le nom du produit au lieu de son code de produit.

Mais mon produit a 2000 loggings, et quand je charge mon formulaire c'est très lent. Il est également lent lors de l'logging / validation de ma database.

Je pense que la colonne cProduct a quelque chose à voir avec la vitesse de mon formulaire. Est-ce vrai? Comment puis-je l'accélérer?

modifier

Je peux montrer le code, mais il sera less déroutant si j'explique simplement comment fonctionne mon code. Dans ma design, mon datagridview a des colonnes vides. Le nom de datagridview est également le nom de la table qui sera liée, et quand je l'exécute, il crée sa colonne qui se lie automatiquement en fonction du schéma de la table. J'ai également un drapeau qui indique au programme si le champ sera une colonne de list déroulante ou juste la textbox simple. Si c'est une colonne combobox, elle va générer un script sql, et exécuter et sauvegarder le résultat dans une datatable qui sera la source de données de la combobox. Le datamember et le displaymember de la colonne combobox sont également déterminés par le drapeau.

Il est conseillé de ne mettre aucune condition dans mon script pour la source de données de ma colonne de list déroulante.

Edit – 12-05-12 J'essaie de filterr ma source de données sql en la liant à la colonne de la list déroulante datagridview … et je dirais que cela aide à accélérer mon formulaire. Mon problème maintenant est quand j'ajoute un nouvel logging dans mon datagridview qui n'est pas inclus dans la list déroulante. Par exemple, je lierai ce script à mon datagridview, "select ID, Desc du produit où ID dans (1,2,3,4,5)". Quand j'insère un nouvel logging / article / produit dans mon datagridview qui est ID = 6, il ne montrera pas la description datagridview …

Combien lent est "très lent". Parlons-nous des secondes ou des minutes?

Essayez de définir la propriété AutoSizeColumnsMode sur None si ce n'est déjà fait. Cela fait longtime que je n'ai pas joué avec datagridview, mais cette propriété a causé des cauchemars de performance pour moi dans le passé.

Si ce n'est pas le problème, je commencerais à append des instructions de synchronisation éparpillées dans le code qui s'exécute lorsque votre grid se charge et quand vous sauvegardez / validez. Cela vous aidera à find ce qui cause la lenteur. Ce n'est presque jamais la chose à laquelle vous vous attendez. Quelque chose d'aussi simple que:

var start = DateTime.Now; //do work var end = DateTime.Now; Console.WriteLine("Timer spot 1: " + end.Subtract(start)); 

Commencez gros. Enveloppez la timer autour d'une méthode entière. Continuez à déplacer ceci autour de votre code jusqu'à ce que vous trouviez (espérons-le) l'endroit qui vous ralentit. Ensuite, essayez et resserrer sur la ligne exacte. Ne pas oublier de vérifier tous les events que vous pourriez tirer pour la lenteur.

J'espère que cela pourra aider!

Je pense que vous devriez essayer d'utiliser la List<T> Class pour résoudre votre problème. C'est juste ma suggestion 🙂

Vous dites la vitesse de votre formulaire … Me conduire à croire que vous faites tout ce travail sur le fil de l'interface user. Je vous suggère de créer un thread distinct pour la mise à jour, et de désactiver tous les controls sur votre formulaire jusqu'à ce que la mise à jour est terminée afin que votre formulaire puisse restr réactif.