IndexOutOfRangeException su DataGridView

martedì 11 novembre 2008 - 10.56

Teech Profilo | Expert

Ho un DataGridView popolato attraverso BindingSource da una mia classe collection
Sulla Load del Form ho il seguente codice:
Try cc = New Cli.Clienti() <--- Popola la mia collection bs = New BindingSource bs.DataSource = cc Catch ex As Exception MessageBox.Show(ex.Message) End Try dgv.DataSource = bs
Nella collection ho implementato un metodo che mi premette di filtrare i dati e uso sulla
cc.Filtra() bs.DataSource = cc '<-- DOPO questa riga ho l'errore
Il filtro funziona correttamente, ma se nella Collection ho inizialmente 10 Item e dopo il filtro solo 3 Item, nel momento in cui si ridisegna il DataGridView incappo in un'ecezzione di IndexOutOfRangeException per le Rows che rimangono vuote (7 nell'esempio precedente).
Ho provato a vuotare a priori la collecton Rows (e quindi anche la mia collection e la cosa non mi piace per niente) ma a quel punto non visualizza nemmeno i dati filtrati.
La funzione Filtra della mia collection vuota l'elemento List della collection e lo ripopola applicando il filtro ai dati.

Come posso aggiornare la DataGridView a run-time cambiando il DataSource alla stessa? O meglio, non cambio il Datasource ma il "contenuto" del datasource?

Allego un semplice progetto che replica l'errore.
Vi prego aiutatemi che proprio non capisco...

Grazie
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

Lanello Profilo | Senior Member

ciao!

senti, io ODIO il binding, perchè anche se in fase di prima stesura del progetto può essere comodo e veloce, dopo qualsiasi "cavolata" diventa un problema, come in questo caso...

ti ho risolto il problema con questa piccola modifica

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

in pratica prima di eseguire il filtro tolgo il binding al datagridview e poi subito dopo aver fatto il filtro ce lo rimetto

non credo sia molto elegante, ma funziona...


fammi sapere se ti è stato di aiuto (e se si accetta la risposta ^___^ )
----------------------------------------------------------------------
http://www.flashinlabs.biz o .com o .net o .it fate voi :P

Teech Profilo | Expert

Non sarà elegante ma funziona benissimo... l'unica cosa che non capisco è perchè riassegnando il BindingSource alla DataGridView genera il problema mentre staccando il BindingSource e riagganciandone un altro (che fondamentalmente è la stessa cosa logicamente) funziona... Secondo c'è un bug sul controllo...

Grazie!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5