2009-06-02 7 views
0

J'ai une DataGridView à laquelle j'ai défini une liste d'objets à DataSource. (Je suis dans VS 2005 en utilisant VB.) J'ai créé le DataGridView en créant une source de données de type AssetIdentifier et en faisant glisser cette source de données sur mon formulaire.Comment gérer la mise à jour d'un DataGridView lorsque le DataSource lié est vide?

Je souhaite mettre à jour DataGridView lorsque la sélection dans une zone de liste déroulante ou un autre DataGridView est modifiée. (. Ci-dessous je considère un clic dans un autre DataGridView) Les travaux suivants:

Public Class dlgShowAssets 

    ' class member variable 

    Private assetIdList As List(Of AssetIdentifier) 

    ' pertinent subs and functions 

    Private Sub RefreshAssetIdentifierDataGridView() 
     AssetIdentifierDataGridView.DataSource = assetIdList 
    End Sub 

    Private Sub AssetDataGridView_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles AssetDataGridView.CellClick  
     assetIdList = RepopulateTheList(id) 
     Me.RefreshAssetIdentifierDataGridView() 
    End Sub 

End Class 

Dans ce cas, je savais toujours que assetIdList aurait au moins un élément. Je mettrais à jour la liste, et réinitialiserais la source de données de DataGridView à cette liste, et tout allait bien. Quand j'ai appliqué ceci à une autre situation, pour laquelle je ne pouvais pas garantir que la liste aurait au moins un élément, ça fonctionnerait bien tant que j'avais au moins un élément dans la liste, mais si la liste est devenu vide, DataGridView a lancé System.IndexOutOfRangeException un certain nombre de fois. Les lignes dans le DataGridView ne disparaîtraient pas si je passais d'un nombre d'éléments non nul à zéro.

J'ai essayé une solution de contournement qui consistait à supprimer tous les éléments, à ajouter un élément "factice", puis à relier de nouveau la liste au contrôle et cela ne fonctionnait toujours pas.

En outre, à la suite de toutes ces exceptions, j'obtiendrais d'autres exceptions similaires lorsque je survolerais les cellules dans DataGridView.

J'ai essayé de suivre ce comportement pendant quelques heures. Des idées? Merci!

Sera heureux d'ajouter plus d'informations si nécessaire.

MISE À JOUR: Certains des membres de AssetIdentifier étaient "Nothing" mais j'ai corrigé cela dans le constructeur, et les exceptions se produisent toujours.

Répondre

0

Code refactorisé et il fonctionne ...

+0

serait bien de savoir comment vous fixe depuis que j'ai le même problème ... –

+0

Je vais voir si je peux retrouver les changements. – John

Questions connexes