AgumentOutofrangeException

lunedì 09 maggio 2011 - 11.06

paky50 Profilo | Newbie

Ciao a tutti, qualcuno mi sa dire il motivo di questo errore?
Il codice è il seguente:

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

...


Grazie

Brainkiller Profilo | Guru

>Ciao a tutti, qualcuno mi sa dire il motivo di questo errore?
>Il codice è il seguente:

A occhio e croce la collection Columns non è valorizzata e quindi non contiene colonne.
Mi sa che il problema è più sopra nel DataSet.
Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

paky50 Profilo | Newbie

Non credo, perchè se commento le due righe per rendere invisibili le conlonne "indesiderate" il codice funziona e nelle DGV appaiono corretamente i dati.
Lo stesso codice funziona in altri casi.
Solo con l'oggetto DateTimePcker ho questo problema :(
Grazie

Brainkiller Profilo | Guru

>Non credo, perchè se commento le due righe per rendere invisibili
>le conlonne "indesiderate" il codice funziona e nelle DGV appaiono
>corretamente i dati.
>Lo stesso codice funziona in altri casi.
>Solo con l'oggetto DateTimePcker ho questo problema :(

Ma sei sicuro che va in errore su quelle due righe ? E sei sicuro che va in errore selezionando sempre la data (cioè sia con le righe commentate che non) ?
Prova a modificare così:

Console.WriteLine(DataGridView1.Columns.Count) DataGridView1.Columns(0).Visible = False DataGridView1.Columns(11).Visible = False

E vedi che cosa esce nella console se 0 o 12.
Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

paky50 Profilo | Newbie

Riporto di seguito due subroutine funzionanti, nella seconda però sono commentate le due righe "incriminate".
Con il commento funziona benissimo cioè nella prima io inserisco la parola da cercare e superato il 3 carattere inizia a fare la query e a far comparire i risultati nella DGV senza che colonne indesiderate.
Nella seconda dopo aver inserito la data i risultati mi appaiono nella DGV ma con le colonne che non vorrei far apparire.
Se decommento le due righe mi viene riportanto l'errore in oggetto ed evidenziata la prima riga. cioè:

DataGridView1.Columns(0).Visible = False

e se commento questo lo stesso errore mi viene riportato in quella successiva.
Non riesco proprio a capirne il motivo.
Ecco il codice di cui sopra:

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

Brainkiller Profilo | Guru

Si ma la Console.Writeline cosa stampa scusa ? non l'hai scritto.

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

paky50 Profilo | Newbie

Mai usato la console...uso VB.NET da poco.
Dove la visualizzo la console?
Graize

Brainkiller Profilo | Guru

Prova così allora:

MessageBox.Show(DataGridView1.Columns.Count.ToString())

esegui e vedi cosa appare.
Apparirà una MessageBox ora.
Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

paky50 Profilo | Newbie

Nel messagebox mi appare zero. Ho provato ad inserirlo nella prima di ricerca e mi esce 15 ovvero il valore esatto.
Secondo me il problema sta nel DataTimePicker.
Premesso che entrambe le sub sono in form figlio.
La cosa strana è che se metto la riga del messageBox nelle sub con il DataTimePicker APPENA apro il form figlio mi appare il il Popup con il valore 0 ed immediatamente mi viene segnalato l'errore.
Se invece il messageBox lo inserisco nella sub con la textBox il Popup con il valore corretto mi appare solo quando effettuo la query quindi DOPO l'apertura del form figlio ed ovviamente non mi viene segnalato alcun errore.
Grazie

Brainkiller Profilo | Guru

>Nel messagebox mi appare zero.

Vedi allora il problema è sopra.
Quindi la query che tu costruisci con il valore preso dal DateTimePicker non restituisce risultati, tu assegni il DataSet (vuoto ma tu pensi che sia pieno) alla GridView, questa non avrà nessuna colonna e quindi va in errore.

Quindi metti un breakpoint premendo F9, sulla linea della Query, poi vai con F5, esegui il programma andando in debug, al Brekpoint l'esecuzione si ferma e andando con il mouse sulle variabili riesci a vedere il loro contenuto e capire dov'è l'errore e perchè si scatena. Cmq. per me la query che tu lanci con una certa combinazione ritorna 0 risultati sicuramente.

Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

paky50 Profilo | Newbie

Domani ci provo ma non può essere la query secondo me, perchè appena apro la form
non viene effettuata alcuna query. Almeno credo.
Domani ti saprò dire meglio.
Per ora grazie mille.

Brainkiller Profilo | Guru

>Domani ci provo ma non può essere la query secondo me, perchè
>appena apro la form
>non viene effettuata alcuna query. Almeno credo.
>Domani ti saprò dire meglio.

Se va in errore evidentemente l'evento ValueChanged del DateTimePicker da qualcuno viene chiamato.
Altra cosa, tutte queste righe:

Dim DateTime As Date = DateTimePicker1.Value.ToShortDateString Dim dataD As String = DateTime.ToString("dd") Dim dataM As String = DateTime.ToString("MM") Dim dataY As String = DateTime.ToString("yyyy") Dim dataForm As String = dataY & "-" & "-" & dataM & "-" & dataD

Le puoi rimpiazzare con una sola riga così:

Dim dataForm as String = DateTimePicker1.Value.ToString("yyyy-MM-dd")

Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

paky50 Profilo | Newbie

Si, però quello che non riesco a capire perchè commentando le due righe la sub non solo non mi dà errore, effettua la query e mi da il risultato esatto sulla DGV con quelle benedette colonne che non riesco a rendere "invisibili".
Grazie per la dritta sulla formattazione della data :)

Brainkiller Profilo | Guru

>Si, però quello che non riesco a capire perchè commentando le
>due righe la sub non solo non mi dà errore, effettua la query
>e mi da il risultato esatto sulla DGV con quelle benedette colonne
>che non riesco a rendere "invisibili".
>Grazie per la dritta sulla formattazione della data :)

Si perchè evidentemente l'evento ValueChanged scatta più volte e tu invece escludi questa cosa a priori. Non è che magari vai a settare la data da qualche parte tu ? Comunque se tu vai in debug mettendo dei breakpoint capisci subito il problema.
Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

paky50 Profilo | Newbie

Dopo il tuo consiglio sul messageBox mi sono accorto che appena richiamo il il form figlio il popup da risultato zero.
Quindi ho pensato di inserire un controllo nella sub ed eliminando il commento funziona tutto . I
l codice è il seguente:

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

Mi piacerebbe però capirci qualcosina in più.
Grazie

Brainkiller Profilo | Guru

>Mi piacerebbe però capirci qualcosina in più.
>Grazie

Cmq. ti assicuro che il problema è sopra, la query viene eseguita e non ritorna risultati.
Quindi tu passi come paraemtro dataForm.Trim e certamente in alcuni casi non ritorna niente. devi capire il perchè.
magari non ci sono dati nella tabella con quella data.
Puoi anche spostare la MessageBox sopra e quindi qui:

M.adattatore.Fill(ds1, "Prova") MessageBox.Show(ds.Tables("Prova").Rows.Count) DataGridView1.DataSource() = ds1.Tables("Prova")

In questo modo ti visualizza le righe nella tabella Prova del DataSet ds.
Vedrai che anche in questo caso avrai 0 righe.
Quindi il problema è nella query, nel parametro o nel database che non ha righe con una certa data.
Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5