Saturday, May 31, 2008

Leggere RSS con Windows Media Center

. Saturday, May 31, 2008
0 commenti

Oltre a guardare TV, DVD, ascoltare musica con Windows Media Center, volendo è possibile anche leggere feed RSS o guardare/ascoltare podcast e video blog tramite Media Center RSS Reader.
Dopo aver effettuato il download dell'applicazione compare una nuova sezione in Accessori ( Fig1)

Figura 1RssMediaCenter1 Figura 2RssMediaCenter2

La prima volta l'applicativo richiede un codice di attivazione che si può richiedere direttamente dal sito tramite il menù Activate ( Fig2). 
Attivato, si accede alla sezione RSS News & Casts ( Fig4). Per aggiungere i feed rss da consultare bisogna utilizzare la funzione messa a disposizione da IE 7.0 ( Fig 3)

Figura 3
RssMediaCenter3
Figura 4
RssMediaCenter4

Ed ecco la lista dei contenuti:
RssMediaCenter5

Read More »»

Tuesday, May 27, 2008

La potenza del ListView

. Tuesday, May 27, 2008
0 commenti

Di controlli per l'associazione dati in Asp.Net c'è ne sono di diversi e per ogni esigenza, ma dalla versione 3.5 ne è stato introdotto uno nuovo: ListView.
Il controllo, a differenza per esempio del controllo GridView, non esegue in fase di design nessun rendering, cioè fa parte della schiera dei controlli definiti template-driven.
Tra le prime cose che possiamo notare è la possibilità di definire la porzione di markup generale che verrà restituito in fase di rendering attraverso l'uso del LayoutTemplate.
In altre parole se per esempio vogliamo ottenere un layout a griglia basta definire in LayoutTemplate l'aspetto generale della tabella e in ItemTemplate il markup a livello di riga e cella:

   1: <asp:ListView ID="ListView" runat="server">
   2:   <LayoutTemplate>
   3:     <table border="1">
   4:       <tr>
   5:         <td style="background-color:Gray">Id</td>
   6:         <td style="background-color:Gray">Descrizione</td>
   7:         <td style="background-color:Gray">Note</td>
   8:       </tr>
   9:       <tr>
  10:         <td runat="server" id="itemPlaceholder"></td>
  11:       </tr>
  12:     </table>
  13:   </LayoutTemplate>
  14:   <ItemTemplate>
  15:     <tr>
  16:       <td><%# Eval( "ID")%></td>
  17:       <td><%# Eval( "Description")%></td>
  18:       <td><%# Eval( "Note")%></td>
  19:     </tr>
  20:   </ItemTemplate>
  21: </asp:ListView>


Ecco il risultato:
ListView1 
Ma basta cambiare il codice del LayoutTemplate:


   1: <asp:ListView ID="ListView" runat="server">
   2:   <LayoutTemplate>
   3:     <table border="0">

   4:       <tr>
   5:         <td colspan="2"><hr /></td>
   6:       </tr>
   7:       <tr>
   8:         <td runat="server" id="itemPlaceholder"></td>
   9:       </tr>
  10:       <tr>
  11:         <td colspan="2"><hr /></td>
  12:       </tr>
  13:     </table>
  14:   </LayoutTemplate>
  15:   <ItemTemplate>
  16:     <tr>
  17:       <td style="background-color:Gray">Id</td>
  18:       <td><%#Eval("Id")%></td>
  19:     </tr>
  20:     <tr>
  21:       <td style="background-color:Gray">Descrizione</td>
  22:       <td><%#Eval("Description")%></td>
  23:     </tr>
  24:     <tr>
  25:       <td style="background-color:Gray">Note</td>
  26:       <td><%#Eval("Note")%></td>
  27:     </tr>
  28:   </ItemTemplate>
  29: </asp:ListView>

e il risultato cambia radicalmente:
ListView2 
Il legame tra il LayoutTemplate e ItemTemplate viene determinato grazie all'uso di un controllo runat server che presenta come id il valore itemPlaceholder ( volendo è possibile modificarlo).
Altra funzionalità che merita di essere sicuramente menzionata è quella di raggruppare i dati in un layout tabellare affiancato utilizzando un GroupTemplate:

   1: <asp:ListView ID="ListView" runat="server" GroupItemCount="2">
   2:   <GroupTemplate >

   3:     <tr>
   4:       <td runat="server" ID="itemPlaceholder"></td>
   5:     </tr>
   6:   </GroupTemplate>
   7:   <LayoutTemplate>
   8:     <table border="1">
   9:       <tr>
  10:         <td ID="groupPlaceholder" runat="server"></td>
  11:       </tr>
  12:     </table>
  13:   </LayoutTemplate>
  14:   <ItemTemplate>
  15:     <td style="background-color:Gray"><%#Eval("Id")%><br />
  16:       <%#Eval("Description")%><br />
  17:       <%#Eval("Note")%>
  18:     </td>
  19:   </ItemTemplate>
  20: </asp:ListView>

ListView3 
All'interno di GroupTemplate definiamo il controllo con id itemPlaceholder mentre in LayoutTemplate un controllo con id groupPlaceholder in cui verrà inserito il contenuto del GroupTemplate.
In definitiva si tratta di un controllo estremamente versatile a cui dobbiamo aggiungere la possibilità di effettuare ordinamenti e paginazione dati.

Read More »»

Saturday, May 24, 2008

InkSeine

. Saturday, May 24, 2008
4 commenti

InkSeineInkSeine è un'applicazione sviluppata da Microsoft Research che permette di
fare tutto ciò che la nostra creatività immagina con il solo uso di una penna.
Il software è stato progettato per i tablet PC con sistemi Windows Vista ( ad eccezione di Home Basic) o Windows XP ( Tablet PC Edition).
Le features sono veramente impressionanti, ma per avere un'idea più precisa di ciò che è possibile fare vi rimando al video:

Read More »»

Wednesday, May 21, 2008

Cambiare l'ordine delle colonne in un GridView

. Wednesday, May 21, 2008
0 commenti

Premesso che il titolo non rende al massimo l'idea di ciò che intendo mostrare ( purtroppo non sono riuscito a trovare di meglio), vediamo di rendere più chiaro con un esempio.
Con il seguente markup:

   1: <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true">
   2:   <Columns>
   3:     <asp:TemplateField>
   4:       <ItemTemplate>
   5:         <asp:LinkButton runat="server" ID="lnkDelete" Text="Delete"></asp:LinkButton>
   6:       </ItemTemplate>
   7:     </asp:TemplateField>
   8:   </Columns>
   9: </asp:GridView>


otteniamo come risultato dopo aver effettuato il bind sul controllo GridView:

 OrderGridView1
Ma come si può procedere se vogliamo spostare la TemplateColumn al termine della griglia che presenta la property AutoGenerateColumns a true?
OrderGridView2 
Agendo sull'evento RowCreated del controllo GridView vado a recuperare la prima cella (quella che voglio spostare) di ogni riga per poi aggiungerla alla collection cambiando banalmente l'indice:


   1: protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
   2: {
   3:   TableCell cell = e.Row.Cells[0];
   4:   e.Row.Cells.AddAt(e.Row.Cells.Count, cell);
   5: }
Se qualcuno conosce un'altra soluzione basta commentare il post. smile_nerd

Read More »»

Monday, May 19, 2008

Silverlight: Rich Text Editor

. Monday, May 19, 2008
0 commenti

SilverlightRich Ai vari rich text editor segnalati qui e qui nè segnalo un altro, ma questa volta per Silverlight.
Il progetto è disponibile su codeplex ed inoltre qui e qui è possibile testare online le varie features.

Read More »»

Sunday, May 11, 2008

Analisi performance WPF

. Sunday, May 11, 2008
0 commenti

Anche quando si sviluppano applicazioni WPF l'analisi delle performance non può essere tralasciata, in quanto a seconda della CPU, della tecnologia della nostra scheda grafica, dall'uso di animazioni, dal 3D e tanto altro possiamo ottenere risultati più o meno efficenti.
Microsoft mette a disposizione una serie di strumenti di profiling delle performances ed inoltre segnalo un'importante documento di fine 2006 sul tema rilasciato da Kiran Kumar.
Infine Scott Guthrie, qualche mese fa rendeva noto che saranno rilasciati questa estate una serie di ottimizzazioni delle prestazioni in ambito WPF, ma per maggiori dettagli vi rimando direttamente al post.

Read More »»

Thursday, May 8, 2008

ToTable di DataView per valori univoci

. Thursday, May 8, 2008
0 commenti

Nel Framework 2.0 è stato introdotto il metodo ToTable (di cui personalmente non conoscevo l'esistenza smile_omg) della classe DataView.
L'aspetto interessante di questo metodo è rappresentato da un suo overload che permette di restituire un nuovo DataTable costituito solo da righe distinte ( per chi invece fosse interessato a qualcosa di "simile" nel risultato finale, per il Framework 1.x qui un possibile modo).
Ma vediamo un semplice esempio in cui ho creato una DataTable che presenta in due righe lo stesso valore per la colonna JobType.
C#:

   1: DataTable dt = new DataTable();
   2: dt.Columns.Add(new DataColumn("Name", typeof(string)));
   3: dt.Columns.Add(new DataColumn("JobType", typeof(string)));
   4: DataRow row;
   5:  
   6: row = dt.NewRow();
   7: row[0] = "Scott";
   8: row[1] = "IT-Programming";
   9: dt.Rows.Add(row);
  10:  
  11: row = dt.NewRow();
  12: row[0] = "Johan";
  13: row[1] = "Legal";
  14: dt.Rows.Add(row);
  15:  
  16: row = dt.NewRow();
  17: row[0] = "Bill";
  18: row[1] = "Legal";
  19: dt.Rows.Add(row);
  20:  
  21: row = dt.NewRow();
  22: row[0] = "Paul";
  23: row[1] = "Medical";
  24: dt.Rows.Add(row);
  25:             
  26: GridView1.DataSource = dt.DefaultView.ToTable( true, new string[] { "JobType"});
  27: GridView1.DataBind();


Vb.Net:


   1: Dim dt As DataTable = New DataTable()
   2: dt.Columns.Add(New DataColumn("Name", GetType(String)))
   3: dt.Columns.Add(New DataColumn("JobType", GetType(String)))
   4: Dim row As DataRow
   5:  
   6: row = dt.NewRow()
   7: row(0) = "Scott"
   8: row(1) = "IT-Programming"
   9: dt.Rows.Add(row)
  10:  
  11: row = dt.NewRow()
  12: row(0) = "Johan"
  13: row(1) = "Legal"
  14: dt.Rows.Add(row)
  15:  
  16: row = dt.NewRow()
  17: row(0) = "Bill"
  18: row(1) = "Legal"
  19: dt.Rows.Add(row)
  20:  
  21: row = dt.NewRow()
  22: row(0) = "Paul"
  23: row(1) = "Medical"
  24: dt.Rows.Add(row)
  25:  
  26: GridView1.DataSource = dt.DefaultView.ToTable(True, New String() {"JobType"})
  27: GridView1.DataBind()


Il risultato del metodo ToTable:
JobType: IT-Programming, Legal, Medical

Read More »»