2013-03-01 5 views
2

Je suis confronté à ce problème depuis quelques heures.Erreur IndexOutOfRangeException lorsque DataGridView est cliqué

Voici ce qui se passe:

Quand mes charges de forme, j'ai un DataGridView avec un List<Entity> vide comme source de données.

DataGridView.Datasource = null; 
DataGridView.Datasource = entity_list; 

D'abord, je l'ai mis à null afin de mettre à jour le DataGridView.

Puis, je peux ajouter des entités à cette liste, de sorte que le morceau de code sera exécuté chaque fois que j'en ajouterai un. Le problème que j'obtiens est qu'après avoir ajouté une entité à la liste et mis à jour le DataSource, j'ai obtenu un IndexOutOfRangeException quand j'ai cliqué sur le DataGridView. C'est assez bizarre.

+0

Je pense que vous ne comprenez pas la partie de "répondre à vos propres questions" S'il vous plaît lire http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ une fois de plus –

+0

@ SonerGönül que voulez-vous dire? Je viens de le lire, il dit que c'est bien de le faire. Je passe juste mon temps à écrire cela parce que je n'ai trouvé aucune solution sur le web ou SO. Je voulais juste aider quelqu'un qui pourrait être dans le même état que moi. – Andres

+0

Mais vous ne l'avez pas exprimé sous la forme d'une question, alias la deuxième phrase de ce lien. – MyCodeSucks

Répondre

2

Le problème apparaît car je peux ajouter des entités à cette liste et, pour une raison quelconque, si la source de données est une liste vide, cette exception s'affiche lorsque vous essayez d'ajouter une entité à cette liste. Donc, la solution que j'ai utilisée, est de demander avant de faire la liaison de liste, si cette liste a au moins 1 entité.

DataGridView.DataSource = null; 
if (entity_list.Count() > 0) 
    { 
     DataGridView.DataSource = entity_list; 
    } 

Et c'est tout! Résolu! J'ai lu que l'utilisation de BindingLists peut être un moyen de résoudre cela, mais si vous utilisez List comme moi, j'espère que cela peut vous aider!

+0

Cela m'a aidé! Je me demande ce qui se passe à un niveau plus profond dans le programme. Pour ce que ça vaut ma source de données est un KeyedCollection. – vpipkt

+0

La clé que j'en ai retirée, c'est que vous ne voulez jamais lier une liste vide à la DGV. J'ai essayé la solution BindingList et cela a fonctionné, mais c'est beaucoup plus propre à mon avis. Merci! – pseudocoder

Questions connexes