If....end if dove sbaglio?

sabato 08 maggio 2010 - 00.19

xenical73 Profilo | Newbie

Innanzi tutto essendo appena registrato porgo un cordiale saluto a tutti.
Veniamo al problema.

Mi son avvicinato da poco ai DB e asp..quindi inesperto totale

Ho realizzato un DB con SQLexpress 2008 e una semplice webform con VS 2008 per consultare i dati.
Le pagine sono principalmete costituite da formView in modo da poter visualizzare editare , eliminare o aggiungere i dati.

Nella pagina "Anagrafica" ho posizionato un dropdownlist box(su cui è attivo il postback) con cui selezionare il cliente e una volta selezionato vorrei che comparisse la formview con i dati relativi (vorrei che comparisse solamente dopo la selezione con il ddl almeno al primo caricamento della pagina..invece attualmente al caricamento mi comparela formview con la prima voce della tabella anagrafica del DB).

Cercando sulla rete avevo trovato questo comando:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If IsPostBack Then FormView1.Visible = False
End If
End Sub

Però nel debug mi compare questo errore
Errore 110 'End If' deve essere preceduto da un 'If' corrispondente. C:\Users\.....\Anagrafica.aspx.vb


Ma non sono presenti entrambi?

e inoltre (da completo ignorante in materia) non sarebbe più corretto

If IsNotPostBack Then FormView1.Visible = False


Grazie a chiunque sappia darmi una risposta.

Pinky Profilo | Junior Member

Mi pare che End If non serve se tutta l'istruzione IF (If ... Then ...) sta su una riga, oppure deve stare alla fine di questa.
L'errore ti riporta appunto che del tuo "End If" a chiusura di un blocco IF non viene trovata la corrispondente apertura.

Di solito si usa la forma positiva per le variabili booleane (ed anche per le proprietà e per i metodi).
Ad esempio IsEnable e non IsNotEnable ed anche Checked, IsValid, Confirmed ecc...
Ho letto un libro sulle "guidelines" seguite per lo sviluppo del Framework .Net e mi pare che questa regola possa essere elevata a "norma".
C'erano anche degli esempi e la spiegazione del perchè di questa scelta, ma sinceramente non li ricordo...
É anche buona pratica seguire questa "regola" per lo sviluppo di librerie personali o da distribuire, scritte per il .Net.

Alessandro

jchnusa Profilo | Junior Member


>Mi son avvicinato da poco ai DB e asp..quindi inesperto totale
>
Pure io!


>Cercando sulla rete avevo trovato questo comando:
>
>Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
>Handles Me.Load
> If IsPostBack Then FormView1.Visible = False
> End If
> End Sub
>
Prova così:
-Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
- If IsPostBack Then
- FormView1.Visible = False
- End If
- End Sub

Non sono sicuro che dia esito positivo al debug ma almeno end if dovrebbero essere ok

-


----Studio ASP.NET 3.5 - Visual Web Developer 2008 - VB ...ed ogni tanto bevo una birretta :D ( il tutto per passione )----

xenical73 Profilo | Newbie

Quindi mi dite che la forma è corretta e che
o scrivo tutto sulla stessa linea o su 3 linee separate..proverò.

Grazie

alexmed Profilo | Guru

Ciao
Direttamente dalla guida in linea:

"Il form a riga singola è utile per eseguire test semplici e rapidi ma il form a righe multiple assicura maggiore strutturazione, flessibilità e facilità nelle operazioni di lettura, gestione e debug"

http://msdn.microsoft.com/it-it/library/752y8abs(VS.80).aspx

Quindi sono corrette tutte e due. E' solo una questione di leggibilità.
Ciao
alexmed

xenical73 Profilo | Newbie

Da prove fatte risulta che se il comando lo scrivo su un alinea l'errore persiste

se lo scrivo su 3 linee l'errore sparisce

Però rimane il fatto che al caricamento della pagina compare la formview in questione, se poi utilizzo l'azione di paging presente bnella formview (che quindi attiva il postback) la formview sparice (come giustamente indicato dal comando).

Ma per non far comparira la formview al caricamento della pagina, che comando devo scrivere?

Pinky Profilo | Junior Member

Questo è perfettamente valido (blocco IF in forma breve):
If Not IsPostBack Then MyControl.Visible = False

come anche nella forma estesa (più leggibile come già fatto notare):
If IsPostBack Then
'codice dopo un postback
'... put your code here ...
Else
'codice da eseguire alla prima visualizzazione
MyControl.Visible = False
End If

o così:
If Not IsPostBack Then
'codice da eseguire alla prima visualizzazione
MyControl.Visible = False
Else
'codice dopo un postback
'... put your code here ...
End If

Ciao
Alessandro

jchnusa Profilo | Junior Member


>Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
>Handles Me.Load
> If IsPostBack Then FormView1.Visible = False
> End If
> End Sub

qui sopra " End If " è di troppo perkè if include la condizione nella stessa riga e l' istruzione finisce con la riga stessa

>Errore 110 'End If' deve essere preceduto da un 'If' corrispondente. C:\Users\.....\Anagrafica.aspx.vb


se vuoi eseguirlo sulla stessa riga cancella End If ma si consiglia di usare if ed end if in particolare per noi inesperti per evitare problemi in caso di manipolazioni future nella pagina di codice

if le istruzioni sono scritte in più righe then
qui sotto scriverò "end if"
End if
Ciao
----Studio ASP.NET 3.5 - Visual Web Developer 2008 - VB ...ed ogni tanto bevo una birretta :D ( il tutto per passione )----

xenical73 Profilo | Newbie

Ecco dove sbagliavo e le cose nn mi tironavano

If Not IsPostBack Then MyControl.Visible = False


Scrivevo If IsNotPostBack invece di If Not IsPostBack

Grazie mille
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