Errore Incompatibilità oggetto Control

venerdì 23 maggio 2008 - 10.46

Alexi Profilo | Newbie

Dato questo codice:

// prelevo valore codice ID Atleta selezionato in Atleti.aspx
Control c = PreviousPage.Form.FindControl("GridViewOlimpico");
GridView Tabella = (c as GridView);
int codiceAtleta =Tabella.Rows[Tabella.SelectedIndex].Cells[1].Text;

Quando tento di convertire 'codiceatleta' in int32, in esecuzione esce un'eccezione..
"Formato della stringa di input non corretto."

Ho provato in tutti i modi..'toString', '.Trim'...ecc..ma non funzia.
Se cambio il tipo di variabile da int a string(codiceatleta)..si verifica un'altra eccezione al momento di eseguire la query..nel mio db.
Il tipo di dato che mi serve passare da una pagina all'altra è di tipo 'int'.

Non So + dove sbattere la testa!!! Help!

tammy16 Profilo | Newbie

Ciao..
spero il mio aiuto ti possa servire..
da Tabella.Rows[Tabella.SelectedIndex].Cells[1].Text ti viene fuori un risultato string.. quindi scrivi questo:

string codiceatleta=tabella.rows[tabella.selectedindex].cells[1].text; int Codice_Atleta= int.parse(codiceatleta)

Guarda se funziona.. e fammi sapere..ciao ciao
tammy

Wamba Profilo | Expert

Quello che fai non è una conversione, è un assegnamento.
Prova a modificare questa riga di codice: int codiceAtleta = int.Parse(Tabella.Rows[Tabella.SelectedIndex].Cells[1].Text);

Ah Tammy mi hai battuto di pochi secondi: praticamente allo sprint!

-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

Alexi Profilo | Newbie

vi ringrazio dei consigli! xò non funziona
sempre lo stesso errore, avevo già provato queste conversioni..
SqlException: 'Formato della stringa di input non corretto'.

Wamba Profilo | Expert

>SqlException: 'Formato della stringa di input non corretto'.

Ciao Andrea,
Non avevi parlato di SQLException. Non credo che il codice che hai postato nel tuo primo messaggio possa portare ad una eccezione SQL. Postaci il codice nel punto in cui ti dà l'eccezione: possibilimente anche la query.

-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

Alexi Profilo | Newbie

ho cambiato soluzione adesso con questo codice:

Control c = PreviousPage.Form.FindControl("GridViewOlimpico");
GridView TabOlimpico = (c as GridView);

Control c2 = PreviousPage.FindControl("GridViewCompound");
GridView TabCompound = (c2 as GridView);
string codiceAtleta = "";
int Codice_Atleta = 0;

if ( TabCompound.SelectedIndex > -1)
{
codiceAtleta = TabOlimpico.Rows[TabOlimpico.SelectedIndex].Cells[1].Text;
Codice_Atleta = int.Parse(codiceAtleta);

}
else
{
codiceAtleta = TabCompound.Rows[TabCompound.SelectedIndex].Cells[1].Text;
Codice_Atleta = int.Parse(codiceAtleta);
}

Dice che Index non compreso nell'intervallo. Richiesto valore non negativo e minore della dimensione dell'insieme.
Nome parametro: index

cosa faccio?

Wamba Profilo | Expert

Probabilmente perchè entra nell'else:

> if ( TabCompound.SelectedIndex > -1)
> {
> codiceAtleta = TabOlimpico.Rows[TabOlimpico.SelectedIndex].Cells[1].Text;
> Codice_Atleta = int.Parse(codiceAtleta);
>
> }
//Else quindi <= -1 fai riferimento a: TabCompound.SelectedIndex
> else
> {
> codiceAtleta = TabCompound.Rows[TabCompound.SelectedIndex].Cells[1].Text;
> Codice_Atleta = int.Parse(codiceAtleta);
> }
>
>Dice che Index non compreso nell'intervallo. Richiesto valore
>non negativo e minore della dimensione dell'insieme.
>Nome parametro: index
>
>cosa faccio?

-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

tammy16 Profilo | Newbie

buongiornooo..
scusate se mi faccio sentire adesso..ma di sabato e domenica non lavoro e quindi scollego il cervello..
In che evento metti questo codice?? io x estrarre il codice come nel tuo caso uso il commandargument.. secondo me ti conviene invece di tutti questi giri.. poi fai tu.. è solo un consiglio!!!

cmq wamba ha ragione..probabilmente sarà l'else che non va.. perchè non c'è un indice che è uguale a -1.. ed è per questo che ti dà quell'errore..

Alexi Profilo | Newbie

l'evento è il LOAD della pagina. Come faresti te a gestire con il commandargument? nn lo conosco.

tammy16 Profilo | Newbie

mi sembra di aver visto dal tuo codice che stai usando la gridview.. nell'evento rowcommand puoi usare l'oggetto commandargument, che ti va ad estrarre il codice della riga cliccata..
cioè se tu hai una gridview dove c'è un buttonfield e clicchi sopra a quel pulsante, il commandargument ti restituisce l'indice di quella riga, di conseguenza anche il codice di quella riga..
il codice è:
int riga=convert.Toint32(e.commadargument); ---> nella variabile riga avrai l'indice
string codice=nomegridview.rows[riga].cells[0].text;---> in codice avrai il "codice" però in formato stringa (scusa per la ripetizione)
int codiceatleta=int.parse(codice);---> così avrai l'esatto codice nel formato uguale al tuo database

Poi dipende da quello che devi fare tu nel tuo progetto.. però è un ottimo modo per estrarre il codice o qualsiasi altro campo da una gridview..
Spero di essermi spiegata bene..
ciao
tammy

Alexi Profilo | Newbie

prendo subito in esame le vostre proposte..
se risolvo ve lo dico :)
Grazie

Alexi Profilo | Newbie

nada e.command.. quella soluzione non funzia..
sono fermo..scusate ma stò imparando e non sono molto ferrato ^^
ho solo 2 grid e gli devo passare solo il codice(id,chiave primaria nel mio db) in base alla query che faccio...
in pratica se selezioni una riga di una grid o un'altra sull'altra grid(pagina precedente)..passo il valore selezionato alla mia query(pagina successiva)..la parte delle query ce l'ho, mi manca l'altra.

tammy16 Profilo | Newbie

sai cosa puoi fare x far funzionare il commandargument?? prova questo codice: <%#((GridViewRow)Container).RowIndex %> nella proprietà commandargument del pulsante della gridview (nel codice in asp.net)..
fammi sapere
tammy

Alexi Profilo | Newbie

grazie a tutti, ho risolto con il datakeys :)

impostando nella grid il codiceAtleta, la proprietà datakeysname e recuperando il valore selezionato nella pagina successiva :)
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5