 | |
Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum |
[Asp.Net] Update datagrid Clicca QUI per vedere il messaggio nel forum |
| Sonia |
Ho un problema con la funzione update del datagrid.
Uso vbscript.
Ho due problemi.
1)
http://www.icconcorezzo.brianzaest.it/prova.aspx
Il problema è questo:
quando faccio edit ed edito il testo, me lo memorizza nel db, ma non mi aggiorna la pagina. Se aggiorno, mi dà il dato che ho appena memorizzato. Ho provato a mettere un response.redirect dandogli la stessa pagina, ma non funziona.
2)
Devo fare un'area protetta da user e pass.
Il web.config l'ho impostato in questo modo:
code:
<configuration>
<system.web>
<compilation defaultLanguage="vb" debug="true" />
<authentication mode="Forms">
<forms name="auth" loginUrl="login.aspx"
protection="All" timeout="30">
<credentials passwordFormat="Clear">
<user name="admin" password="admin" />
</credentials>
</forms>
</authentication>
<authorization>
<allow users="admin" />
<deny users="?" />
</authorization>
</system.web>
</configuration>
Se metto il web.config nella cartella che devo proteggere (nel mio caso net/admin) mi dà il seguente errore:
Errore di configurazione.
Descrizione: Si è verificato un errore durante l'elaborazione di un file di configurazione necessario per soddisfare la richiesta. Verificare i dettagli dell'errore specifico riportati di seguito e modificare il file di configurazione in modo appropriato.
Messaggio di errore del parser: Non è possibile utilizzare una sezione registrata come allowDefinition='MachineToApplication' al di sotto del livello di applicazione. L'errore può essere dovuto alla presenza di una directory virtuale non configurata come applicazione in IIS.
Errore nel codice sorgente:
Riga 3: <compilation defaultLanguage="vb" debug="true" />
Riga 4:
Riga 5: <authentication mode="Forms">
Riga 6: <forms name="auth" loginUrl="login.aspx"
Riga 7: protection="All" timeout="30">
Se lo metto nella cartella di root, non mi fa accedere a nessuna pagina aspx e mi rimanda alla pagina di login.
Grazie in anticipo |
| Rocco.Li |
1) Devi rifare il databind della datagrid al termine dell'edit
ergo devi rifare la query a db e ripopolare il controllo.
2) la configurazione e' corretta ma non te la applica con conseguente errore perche' la directory che stai cercando di proteggere non e' un directory virtuale di IIS.
Accedendo da pannello di controllo, tools amministrativi --> Internet Information Services, indiviadua la directory che ti interessa e virtualizzala.
se sono stato ostico, chiedimi pure ulteriori spiegazioni
Ciao |
| Sonia |
Originally posted by Rocco.Li
2) la configurazione e' corretta ma non te la applica con conseguente errore perche' la directory che stai cercando di proteggere non e' un directory virtuale di IIS.
Accedendo da pannello di controllo, tools amministrativi --> Internet Information Services, indiviadua la directory che ti interessa e virtualizzala.
è quello che ho letto cercando in internet.
devo contattare l'amministratore del server quindi...
grazie :)
quella del datagrid la provo domani, poi al massimo se ho problemi posso contattarti vero? :) |
| ripe |
| Per quanto riguarda il controllo DataGrid ha ragione Rocco, non sapevo invece nulla sulla seconda questione. Grazie per il chiarimento, è utile anche a me! |
| Rocco.Li |
Originally posted by ripe
Per quanto riguarda il controllo DataGrid ha ragione Rocco, non sapevo invece nulla sulla seconda questione. Grazie per il chiarimento, è utile anche a me!
Sulla seconda questione potete notare che ogni volta che create una nuova Solution ASP.NET con VSTUDIO, viene creata di conseguenza una directory virtuale in IIS.
Infatti e lo stesso IIS che va a gestire tramite le impostazioni nel Web.Config la sicurezza, "l'aggancio" con il Framework.NET e' proprio la directory virtuale. Motivo percui, se volete proteggere solo una sottodirectory del vostro progetto inserendo un oppurtuno Web.Config dovete virtualizzarla. |
| ripe |
| A me non piace molto la protezione via Web.config... preferisco lasciare l'accesso libero a tutti gli utenti da configurazione, e poi controllare pagina per pagina le credenziali... però ho capito come devo fare se sono costretto ad usarla! |
| Sonia |
Originally posted by ripe
A me non piace molto la protezione via Web.config... preferisco lasciare l'accesso libero a tutti gli utenti da configurazione, e poi controllare pagina per pagina le credenziali... però ho capito come devo fare se sono costretto ad usarla!
in che senso ripe?
tu come imposti le aree protette? |
| Sonia |
Originally posted by Rocco.Li
1) Devi rifare il databind della datagrid al termine dell'edit
ergo devi rifare la query a db e ripopolare il controllo.
ho poi controllato il mio script
alla fine dell'update gli faccio fare il databind
setto l'edititemindex a -1 così esco dalla funzione di edit e poi gli faccio fare il databind, ma non funziona come dovrebbe
code:
MyDataGrid.EditItemIndex = -1
BindDataGrid()
posso provare a fare una select al posto di quello, però avrei del codice ridondante |
| ripe |
Originally posted by Sonia
in che senso ripe?
tu come imposti le aree protette?
Ho creato una classe base da cui derivano tutte le pagine del sito e nel campo Roles imposto quali tipi di utenze possono visualizzare quella pagina (ne ho cinque in tutto: Developer, Administrator, Editor, Redactor, Helper)... nell'evento Page_Init controllo se l'utente è autenticato, controllo se il gruppo a cui appartiene è accreditato per quella pagina e in caso affermativo procedo.
Per l'autenticazione ho creato la classica pagina di login, sfruttando la classe FormsAuthentication senza utilizzare le proprietà del file Web.config. Le credenziali sono memorizzate nel database, con la password criptata con l'algoritmo SHA...
Spero di esserti stato utile! :) |
| Sonia |
Non riesco proprio a sistemare :(
code:
Dim objNomeCtrl As TextBox
objNomeCtrl = CType(objArgs.Item.FindControl("txt_nome"), TextBox)
'crea sql per update ed esegue
Dim strSQL As String
strSQL = "UPDATE interne SET Nome='" & objNomeCtrl.Text & "' WHERE ID=" &
MyDataGrid.DataKeys(objArgs.Item.ItemIndex) & ""
ExecuteSQLStatement(strSQL)
Dim cn As OleDbConnection
Dim strConnect As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" _
& Server.MapPath("database\menu.mdb")
'crea ed apre una nuova connection
Dim objConnect As New OleDbConnection(strConnect)
objConnect.Open()
'crea un nuovo Command
Dim objCommand As New OleDbCommand(strSQL, objConnect)
Dim objDataReader As OleDbDataReader
'esegue sql con Datareader
objDataReader = objCommand.ExecuteReader()
MyDataGrid.DataSource = objDataReader
'setta EditItemIndex a -1 per uscire dalla funzione di edit
MyDataGrid.EditItemIndex = -1
Dim strSelect As String
strSelect = "SELECT * FROM interne where riferimento='2'"
Try
'crea la connect e la apre
Dim objConnect2 As New OleDbConnection(strConnect)
objConnect2.Open()
'crea un Command ed esegue la sql
Dim objCommand2 As New OleDbCommand(strSelect, objConnect2)
objDataReader = objCommand2.ExecuteReader()
Catch objError As Exception
'mostra gli errori
outError.InnerHtml = "<b>* Error while accessing data</b>.<br />" _
& objError.Message & "<br />" & objError.Source & "<p />"
Exit Sub ' e ferma l'esecuzione
End Try
MyDataGrid.DataSource = objDataReader
MyDataGrid.DataBind()
ho provato sia a richiamare la funzione di datagrid principale, sia ad aggiungere la select in fondo alla funzione, ma il risultato non cambia |
| ripe |
Faccio fatica a leggere il codice scritto da altri! :)
Ma in linea di massima mi pare tutto corretto... sarà perché io non uso l'EditItemTemplate per modificare i dati!
Non capisco bene la sequenza delle operazioni che fai, cioè:
- prima aggiorni il database (ExecuteSQLStatement cos'è?)
- poi aggiorni la sorgente di dati ed esci dalla funzione di modifica, ma senza collegare i dati col DataBind
- successivamente leggi nuovamente i dati dalla tabella e li colleghi |
| Sonia |
Originally posted by ripe
Faccio fatica a leggere il codice scritto da altri! :)
Ma in linea di massima mi pare tutto corretto... sarà perché io non uso l'EditItemTemplate per modificare i dati!
Non capisco bene la sequenza delle operazioni che fai, cioè:
- prima aggiorni il database (ExecuteSQLStatement cos'è?)
- poi aggiorni la sorgente di dati ed esci dalla funzione di modifica, ma senza collegare i dati col DataBind
- successivamente leggi nuovamente i dati dalla tabella e li colleghi
ExecuteSQLStatement è solo una funzione per vedere quali dati mi passa nella sql
cmq anche se rileggo i dati (cosa inutile) non me li aggiorna uff |
| ripe |
Mi viene in mente una cosa... dove colleghi i dati la prima volta al datagrid prova a mettere (se non l'hai già fatto):
If Not Page.IsPostBack Then
*** il tuo vecchio codice ***
End If |
| Sonia |
Originally posted by ripe
Mi viene in mente una cosa... dove colleghi i dati la prima volta al datagrid prova a mettere (se non l'hai già fatto):
If Not Page.IsPostBack Then
*** il tuo vecchio codice ***
End If
io ho messo
If Not Page.IsPostBack Then
BindDataGrid()
End If
dove BindDataGrid() è la funzione principale del datagrid |
| ripe |
| E fin qui va bene... nella BindDataGrid cosa c'è invece? |
|
|
|
|