Un suggerimento

mercoledì 21 ottobre 2009 - 09.59

manuelericci Profilo | Newbie

premesso che non sono molto ferrato in materia.
Detto questo, ho la necessità di realizzare un db con campi Stringa e Int e UpLoad File, questo perchè devo realizzare una specie di galleria fotografica, e fino quì tutto ok, ovvero ho realizzato una tabella sul db con questi campi:
id, nome, valore, percorso, nomeFile, e tutto funziona, i dati vengono caricati sul db ed i campi compilati.
Adesso però ho la necessità di cancellare un'immagine che però vorrei fare con un click su una GridView, per cancellare il File e la riga sul db, ho provato a realizzare un evento su Page_Load aggiungendo un HyperLinkField recuperando il nome del file e facendogli eseguire questo script:

Dim nomeFile As String = Request.QueryString("nomeFile")
Dim cancella As String = Request.QueryString("cancella")
If (cancella = "si") Then

'Dim nomeFile As String = TextBox1.Text
Dim filePath As String = cartella & "\" & nomeFile
File.Delete(filePath)
Response.Write("Il file " & filePath & " è stato eliminato correttamente.")
End If
funziona, mi cancella il file fisicamente, però non mi cancella "giustamente", la riga sul db.
Come posso fare ?

martinez Profilo | Senior Member

Ciao!

credo di non aver compreso appieno!!!

scusa usi un datagrid che carica i dati dalla tabella ??? e come li ottiene??? da un objectdatasource o cosa?

se hai un gestore per la datagrid ... puoi implementare la funzione delete appoggiandoti al datasource ... che ti cancella la riga selezionata nel db ... ed esegue una piccola routine per cancellare il file ...

ma se spieghi meglio forse posso aiutarti di più

Antonio

manuelericci Profilo | Newbie

Bravo mi serve questa parte che non riesco ad implementare

se hai un gestore per la datagrid ... puoi implementare la funzione delete appoggiandoti al datasource ... che ti cancella la riga selezionata nel db ... ed esegue una piccola routine per cancellare il file ...

vorrei attraverso il GridView dall'evento RowDelete far partire anche una Routine che mi cancella il file sul server utilizzando il codice indicato prima.

Spero di essere stato chiaro, altrimenti non so come spiegarmi

Gluck74 Profilo | Guru

da visualizzazione design, clicchi sul gridview, appare il menù task, scegli edit columns.....
aggiungi un CommandFiled -> delete.

poi aggiungi questo evento alla gridView


protected void GridView1_RowDeleted(object sender, GridViewDeletedEventArgs e) { if (e.Exception != null) { //gestione dell'errore } else { string ImagePath = e.Values["<NomeColonnaPathFile>"]; cancellaIlFile(imagePath); } }

cancellaIlFile sarebbe la routine che hai già, solo che non ti servono i parametri dalla querystring.
ciao

martinez Profilo | Senior Member

Ciao!

beh! direi che hai tutto a disposizione ....

1) il datasource che si occupa di cancellare la riga selezionata
2) la funzione che si occupa di intercettare il file ed eliminarlo

ti manca solo sapere che devi piazzare tutto nell'evento deleting della GridView supponiamo con ID=gwDirFoto

protected void gwDirFoto_RowDeleting(object sender, GridViewDeleteEventArgs e) { // cancelli il file intercettando il campo che contiene il nome del file }

ricorda di non usare l'evento deleted in quanto questo si scatena DOPO aver cancellato la riga e non ti permette di risalire al nome del file


spero di aver compreso cosa serviva

Antonio

manuelericci Profilo | Newbie

provo immediatamente e ti faccio sapere, intanto ti ringrazio tantissimo

manuelericci Profilo | Newbie

Chiedo scusa a tutti mi rendo conto di essere tonto ma io scrivo in VB e il codice che mi avete dato crea una marea di errori
lo posto aiutatemi a cancellarlo:
il nome del campo che contiene il nome del file si chiama:
nomeFile
il percorso della cartella lo ricavo così:
Dim cartella As String = Server.MapPath("FileUpload\")
Il codice che mi avete inviato lo scritto così

Protected Sub GridView1_RowDeleted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeletedEventArgs) Handles GridView1.RowDeleted
Dim cartella As String = Server.MapPath("FileUpload\")
If (e.Exception = null) Then
{
//gestione dell'errore
}
Else
{
string cartella = e.Values("nomeFile")
cancellaIlFile(cartella)
}
}
End Sub

manuelericci Profilo | Newbie

Corregtemi se sbaglio... mi sembra che così funzioni

Protected Sub GridView1_RowDeleted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeletedEventArgs) Handles GridView1.RowDeleted
Dim fileDaCancellare As String = e.Values("nomeFile")
Dim filePath As String = cartella & "\" & fileDaCancellare
File.Delete(filePath)
End Sub
Ovvero adesso lo script funziona ma mi dice che ho un problema di permessi



GRAZIE 1000000000 FUNZIONA

martinez Profilo | Senior Member

ciao!

l'errore dei permessi si riferisce sicuramente alla cartella dove si trova il file da cancellare ...

devi (credo) dare i permessi di scrittura alla cartella in questione ...

se magari specifici meglio

a risentirci

Antonio

manuelericci Profilo | Newbie

RIPETO GRAZIE 100000000 FUNZIONA HO CORRETTO I PERMESSI

Gluck74 Profilo | Guru

solo un consiglio:
quando devi creare un path per un file, usa sempre la funziona apposita che controlla da sola la presenza o meno del divisore "\":

Dim filePath As String = Path.Combine(cartella, fileDaCancellare);

per il resto va bene.
Usa tranquillamente l'evento RowDeleted che ti permette di cancellare il file dopo il record sul DB,
altrimenti cancellando pirma il file, poi il record, rischi, se per qualche motivo avviene un errore, di cancellare il file e lasciare il record che punta ad un file non più esistente. (ho fatto un po di ripetizioni di parole )

ciao ciao

manuelericci Profilo | Newbie

ok grazie.
ma fammi capire bene se utilizzio questo:
Dim filePath As String = Path.Combine(cartella, fileDaCancellare);
non devo inserire "\"

Ho Provato funziona

Gluck74 Profilo | Guru

questa funzione controlla se in fondo al primo parametro c'è il carattere "\".
se c'è attacca semplicemente il secondo parametro, se non c'è, lo aggiunge e poi attacca il secondo parametro.

quello che non mi ricordo è se fa il controllo anche in cima al secondo parametro.

ciao ciao
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