Posts
256
Comments
330
Trackbacks
7
maggio 2008 Entries
[OT] La leggenda di Hokuto

Anche per Ken il Guerriero (non so se qualcuno di voi ha mai visto questo cartone) passano gli anni, compiendo 25 anni. Il 4 luglio sarà proiettato sul grande schermo uno di quattro lungometraggi, intitolato "Ken Il Guerriero - La leggenda di Hokuto". Per chi volesse approfondire, maggiori notizie qui

posted @ giovedì 29 maggio 2008 11.51 | Feedback (6)
UgiAperitivo...

Ieri sera ho incontrato per la prima volta persone appartenenti a questa community, Matteo e Rosalba. E' stata una bella serata, peccato che il tempo sia volato via... Spero in un prossimo incontro non troppo lontano, magari con l'aggiunta di altre persone.

posted @ mercoledì 28 maggio 2008 7.58 | Feedback (0)
Linq: ThenBy e ThenByDescending

Se abbiamo la necessità di ordinare una query Linq per più campi possiamo utilizzare gli operatori ThenBy e ThenByDescending. Considerando le classi del post precedente, se volessimo ordinare  la query:

1 var query1 = esamiSostenuti 2 .OrderBy(es => es.ID_Studente) 3 .Select(es => new { es.ID_Studente, es.Voto });

non solo per il campo ID_Studente, ma anche per il campo Voto, possiamo scrivere:

1 //Ordinamento Ascendente 2 var query2 = esamiSostenuti 3 .OrderBy(es => es.ID_Studente) 4 .ThenBy(es => es.Voto) 5 .Select(es => new { es.ID_Studente, es.Voto });

Mentre per eseguire l'ordinamento  in modo discendente scriviamo:

1 //Ordinamento Discendente 2 var query3 = esamiSostenuti 3 .OrderBy(es => es.ID_Studente) 4 .ThenByDescending(es => es.Voto) 5 .Select(es => new { es.ID_Studente, es.Voto });

Technorati Tag: ,,
posted @ venerdì 16 maggio 2008 8.49 | Feedback (0)
Content-disposition, ContentType e PDF

Supponiamo di avere un'applicazione web (classica gestione dei preventivi web, ad esempio), che al termine di una serie di operazioni produce un file pdf (il preventivo). Se volessimo rendere scaricabile/apribile il file senza che l'utente debba nuovamente fare click su di un collegamento, al termine delle operazioni potremmo eseguire il redirect verso una pagina contenente del tipo:

1 protected void Page_SaveStateComplete(object sender, EventArgs e) 2 { 3 try 4 { 5 RenderDocument(this.Context); 6 } 7 catch { } 8 } 9 10 public void RenderDocument(System.Web.HttpContext context) 11 { 12 try 13 { 14 string basePath = context.Request.MapPath("."); 15 string partialPath = @"PDF\Documento_convegno.pdf"; 16 string fullPath = System.IO.Path.Combine(basePath, partialPath); 17 //Pulisce il response, per non trasmettere byte che non c'entrano nulla... 18 context.Response.Clear(); 19 //Imposta il tipo di contenuto 20 context.Response.ContentType = "application/pdf"; 21 //Aggiunge l'HTTP header necessario 22 context.Response.AddHeader("Content-disposition", "attachment; filename=Documento_convegno.pdf"); 23 //Invio del file 24 context.Response.TransmitFile(fullPath); 25 context.Response.Flush (); 26 } 27 catch { } 28 }

Nell'esempio il tipo di documento è fissato, ma potremmo utilizzare altri tipi secondo dell'estensione del file, application/rtf per i file rtf e application/msword per i file di Microsoft Word. Invece di utilizzare una pagina aspx,  come suggerito da Andrea Colaci è possibile utilizzare un Generic Handler (file con estensione .ashx). In questo caso il codice potrebbe essere:

1 <%@ WebHandler Language="C#" Class="RendereHandler" %> 2 3 using System; 4 using System.Web; 5 6 public class RendereHandler : IHttpHandler 7 { 8 9 public void ProcessRequest(HttpContext context) 10 { 11 RenderDocument(context); 12 } 13 14 public bool IsReusable 15 { 16 get 17 { 18 return false; 19 } 20 } 21 22 public void RenderDocument(System.Web.HttpContext context) 23 { 24 try 25 { 26 string basePath = context.Request.MapPath("."); 27 string partialPath = @"PDF\Documento_convegno.pdf"; 28 string fullPath = System.IO.Path.Combine(basePath, partialPath); 29 //Pulisce il response, per non trasmettere byte che non c'entrano nulla... 30 context.Response.Clear(); 31 //Imposta il tipo di contenuto 32 context.Response.ContentType = "application/pdf"; 33 //Aggiunge l'HTTP header necessario 34 context.Response.AddHeader("Content-disposition", "attachment; filename=Documento_convegno.pdf"); 35 //Invio del file 36 context.Response.TransmitFile(fullPath); 37 context.Response.Flush(); 38 } 39 catch { } 40 } 41 }

In ambo i casi, la trasmissione del file avviene per mezzo del metodo Response.TransmitFile, invece di leggere con un ciclo il contenuto del file (come suggerito da Fabrizio) Questo metodo permette di scrivere direttamente su HTTP response senza prima creare un buffer in memoria. HttpResponse.TransmitFile

Secondo dei casi è possibile impostare correttamente la proprietà IHttpHandler.IsReusable

posted @ martedì 13 maggio 2008 14.04 | Feedback (7)
[OT] Ancora Ferrari...

Doppietta mancata, ma un nuovo grande trionfo.

Ordine d'arrivo: Massa, Hamilton, Raikkonen.

Prossima tappa: Montecarlo !!!

Technorati Tag:
posted @ domenica 11 maggio 2008 13.43 | Feedback (3)
Linq: Operatore Group By

Supponiamo di avere tre classi rappresentanti una ipotetica basi di dati "Università" (molto semplice). Una classe rappresentante lo studente, un classe rappresentante un esame sostenuto dallo studente ed una classe rappresentante l'associazione tra studenti ed esami sostenuti. Utilizzando un ClassDiagram avremmo qualcosa di simile a:

image

Supponiamo ora, di voler recuperare, una volta popolate le collezione di oggetti opportune, quali esami siano stati sostenuti dagli studenti e con quale votazione, utilizzando LINQ e l'operatore di Group By.

Possiamo scrivere del codice del tipo:

1 var queryEsamiSostenutiDaStudenti = 2 from s in studenti 3 join es in esamiSostenuti on s.ID_Studente equals es.ID_Studente 4 join esa in esami on es.ID_Esame equals esa.ID_Esame 5 select new { s.Cognome, s.Matricola, esa.Nome, esa.Descrizione, es.Voto, es.Lode }; 6 //Esegue il GroupBy per cognome 7 var groupEsamiPerStudente = 8 from eSost in queryEsamiSostenutiDaStudenti 9 orderby eSost.Cognome ascending 10 group eSost by eSost.Cognome; 11 //Visualizza il risultato ottenuto 12 foreach (var groupEsamiStudente in groupEsamiPerStudente) 13 { 14 Console.WriteLine("----------------------------------------------------------"); 15 Console.WriteLine("Lo studente {0} ha sostenuto i seguenti esami con profitto", groupEsamiStudente.Key); 16 foreach (var item in groupEsamiStudente) 17 { 18 Console.WriteLine("\t{0}, {1} {2} {3}", new object[]{ 19 item.Nome , item.Descrizione , 20 item.Voto,item.Lode ? "Con lode" : "Senza lode"} 21 ); 22 } 23 Console.WriteLine("----------------------------------------------------------"); 24 } 25

Utilizzando due cicli foreach riusciamo da ottenere un effetto del tipo:

image

Codice esempio

Technorati Tag: ,
posted @ venerdì 9 maggio 2008 8.28 | Feedback (1)
Button e proprietà UseVisualStyleBackColor

Post nato da discussione su Forum. Per "eliminare" l'effetto del cambio del colore di sfondo (Dal Grigio all'azzurro in modalità standard) di un controllo Button su di una Window Form, è sufficiente impostare a False la proprietà UseVisualStyleBackColor del controllo Button. In questo modo disabilitiamo l'utilizzo dei visual-style per lo specifico controllo (dove supportato)

Technorati Tag:
posted @ venerdì 9 maggio 2008 7.55 | Feedback (2)
Conversione file

Mi segno questo sito http://media-convert.com/conversione/ a titolo di promemoria, che permette di eseguire la conversione (ad esempio da .ods a .xls :-)) di file in diversi formati, direttamente on-line.

posted @ giovedì 1 maggio 2008 8.44 | Feedback (0)
News

View Pietro Libro's profile on LinkedIn

DomusDotNet
   DomusDotNet

Pietro Libro