Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Belo Horizonte, Brazil
    Messaggi
    258

    [2.0-C#] Aprire finestre di dialogo

    Eccomi con un altro problema.
    Il mio obbiettivo è di poter salvare la path di un qualsiasi file nel database, come se fosse un allegato. Avevo pensato di utilizzare il controllo FileUpload, ma non c'è la possibilità di selezionare l'intero percorso, ma soltanto il filename tramite l'omonima proprietà.
    Poi cercado in giro su internet ho trovato la classe OpenFileDialog, solo che mi trovo in difficoltà ad usarla.
    Al momento ho postato del codice in un button che servirebbe ad aprire la finestra di dialogo per selezionare file.

    codice:
    protected void btnLink_Click(object sender, EventArgs e)
        {
            this.btnLink.Click += new System.EventHandler(this.btnLink_Click);
            Stream myStream;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
    
            openFileDialog1.InitialDirectory = "c:\\";
            openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;
    
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                if ((myStream = openFileDialog1.OpenFile()) != null)
                {
                    System.IO.StreamReader sr = new System.IO.StreamReader(openFileDialog1.FileName);
                    MessageBox.Show(sr.ReadToEnd());
                    sr.Close();
                    myStream.Close();
                }
            }
        }
    Non badate tanto al codice.
    Intanto, mi dà un errore al primo if:

    Codice PHP:
    Prima di effettuare chiamate OLEoccorre impostare il thread corrente 
    sulla modalità Single Thread Apartment 
    (STA). Assicurarsi che la funzione 
    Main sia contrassegnata con STAThreadAttribute
    Eccezione generata solo 
    se un debugger è associato al processo

    Come dovrei procedere?
    Grazie anticipatamente.

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Belo Horizonte, Brazil
    Messaggi
    258
    Anyone?

  3. #3
    Il file è sul webserver giusto? quindi sul web server una volta che lo hai ricevuto ad es. usando il fileupload puoi decidere dove salvarlo, memorizzarti il path e inserirlo nel db o dove vuoi. Inoltre, sempre lato server e all'interno della cartella del web site, puoi eventualmente utilizzare le classi File, Directory e Path che ti offrono tutto il necessario per ciclare ed ottenere informazioni sui files.
    Se invece il path che vuoi è quello del file lato client, allora il discorso cambia. Ad esempio la classe che hai citato dovrebbe essere questa
    System.Windows.Forms.OpenFileDialog
    cioè una classe per applicazioni windows che per loro natura hanno accesso alle risorse della macchina in cui sono istallate. Una web app, non ha facile accesso alle risorse del client.
    Saluti a tutti
    Riccardo

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Belo Horizonte, Brazil
    Messaggi
    258
    Mi ritroverei nel secondo punto.
    Quello che voglio ottenere è una casella di testo e un tasto "sfoglia..." che mi permette di, selezionando un file, copiare dentro la casella di testo l'intero percorso del file selezionato (come succede per il controllo FileUpload) e trovare un modo di salvare il percorso come dato nel database.

  5. #5
    sei sicuro di voler salvare "lato server" un path che è "lato client" ? che senso ha?
    comunque, come ti ho detto in precedenza, una normale web app asp.net non ha accesso al file system del client e quello che puoi fare come programmatore lo fai sul file system del web server.
    Chissà se con javascript si possa fare qualche diavoleria per prendersi il path presente in una text box lato client e spedirlo al server. Oppure una applicazione wpf in modalità trusted... mah
    Saluti a tutti
    Riccardo

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Belo Horizonte, Brazil
    Messaggi
    258
    Originariamente inviato da riccardone
    sei sicuro di voler salvare "lato server" un path che è "lato client" ? che senso ha?
    comunque, come ti ho detto in precedenza, una normale web app asp.net non ha accesso al file system del client e quello che puoi fare come programmatore lo fai sul file system del web server.
    Chissà se con javascript si possa fare qualche diavoleria per prendersi il path presente in una text box lato client e spedirlo al server. Oppure una applicazione wpf in modalità trusted... mah
    Ehm allora.. il sito è in locale, anche se in futuro andrà al server.
    I file sono dei documenti in pdf o word, come allegati, che un utente deve selezionare in un percorso in rete locale dell'azienda.
    Siccome non sono molto pratico nella programmazione non saprei come procedere, e se mi chiedi "che senso ha" questa cosa non ti saprei rispondere molto.

  7. #7
    cioè mi sembra di capire che non devi fare nessun upload, giusto?
    In questo caso, credo tu debba creare una qualche procedura che utilizzando la classe Directory con le opportune permissions sulle cartelle visualizzi, magari in una gridview su una normale web form, l'elenco dei files presenti su un server (quindi non la macchina client che in questo momento solo per caso coincide).
    Saluti a tutti
    Riccardo

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Belo Horizonte, Brazil
    Messaggi
    258
    Originariamente inviato da riccardone
    cioè mi sembra di capire che non devi fare nessun upload, giusto?
    Esatto.

    Originariamente inviato da riccardone
    In questo caso, credo tu debba creare una qualche procedura che utilizzando la classe Directory con le opportune permissions sulle cartelle visualizzi, magari in una gridview su una normale web form, l'elenco dei files presenti su un server (quindi non la macchina client che in questo momento solo per caso coincide).
    Ora vedo, grazie!

  9. #9
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Ho fatto un esempio spartano.

    Parte ASPX
    codice:
    <body>
        <form id="form1" runat="server">
        <div>
        Seleziona il file:
        <asp:FileUpload ID="up" runat="server" BackColor="Beige" Width="500" />
        <input type="hidden" id="path" runat="server" />
        
    
    
        <asp:Button ID="btnInserisci" Text="Salva il percorso nel DB" runat="server" />
        </div>
        </form>
    </body>

    Parte VB
    codice:
        Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
            up.Attributes.Add("onChange", "document.form1.path.value=up.value;")
        End Sub
    
        Protected Sub btnInserisci_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnInserisci.Click
            Response.Write("Stai per salvare nel DB il percorso: " & path.Value.ToString)
        End Sub

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Belo Horizonte, Brazil
    Messaggi
    258
    Grazie djciko.
    Nel mentre mi è venuta anche un'altra idea, sempre utilizzando il FileUpload. Ho creato una cartella sul sito, UploadFiles, dove ci saranno tutti i files caricati dagli utenti.

    codice:
    // Mi carica l'eventuale allegato salvato sul db, e quindi anche sulla cartella UploadFiles
    // lbAllegati è un LinkButton
    // Page_Load
    lbAllegati.Text = mioLab_EMC.CaricaLink(txtDatainizio.Text, rblOrarioinizio.SelectedItem.Text, dipendente);
    
    
    // Se l'utente vuole aprire il file lo può fare cliccando sul LinkButton
    protected void lbAllegati_Click(object sender, EventArgs e)
    {
    	string script = "window.open('http://nomecomputer/timesheetweb/UploadFiles/" + lbAllegati.Text + "','DT_Lab_EMC')";
    	if (!ClientScript.IsClientScriptBlockRegistered("NewWindow"))
    		ClientScript.RegisterClientScriptBlock(this.GetType(), "NewWindow", script, true);
    }
    
    
    // Salvataggio del nome del file sul db, e file copiato sul sito dentro la cartella UploadFiles
    protected void btnSalva_Click(object sender, EventArgs e)
    {
    	mioLab_EMC.Salva(txtDatainizio.Text, rblOrarioinizio.SelectedItem.Text, txtDatafine.Text, rblOrariofine.SelectedItem.Text, ddlID_Dipendente.SelectedItem.Text, ddlCentro_costo.SelectedItem.Text, ddlCliente.SelectedValue, ddlCommessa.SelectedItem.Text, txtDescr.Text, fuLink.FileName);
    	string savePath = @"c:\inetpub\wwwroot\timesheetweb\UploadFiles\";
    	if (fuLink.HasFile)
    	{
    		string fileName = fuLink.FileName;
    		savePath += fileName;
    		fuLink.SaveAs(savePath);
    		lblErrore1.Text = "Il file è stato salvato come " + fileName;
    		lblErrore1.ForeColor = System.Drawing.Color.Green;
    	}
    	else
    	{      
    		lblErrore1.Text = "Non hai specificato un file da caricare.";
    		lblErrore1.ForeColor = System.Drawing.Color.Red;
    	}
    }
    Funzionare funziona.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.