Una delle nuove funzionalità disponibili in Silverlight 4.0 è la possibilità di istanziare oggetti attraverso interfaccia COM, in modo da poter interagire con diverse applicazioni presenti nel sistema operativo.
Questa funzionalità è disponibile nelle applicazioni Silverlight installate sul client dell'utente, le cosidette applicazioni Out Of Browser; tali applicazioni, inoltre, devono essere eseguite in modalità full trust sotto specifica autorizzazione da parte dell'utente.
Nell'esempio seguente vediamo come poter creare documenti Microsoft Excel inserendo una serie di dati visualizzati nella tradizionale interfaccia utente, in un datagrid.
private bool firstTime = true; delegate void SheetChangedDelegate(dynamic excelSheet, dynamic rangeArgs); public void Export() { dynamic excel = AutomationFactory.CreateObject("Excel.Application"); excel.Visible = true; dynamic workbook = excel.workbooks; workbook.Add(); dynamic sheet = excel.ActiveSheet; dynamic cell = null; int i = 1; foreach (People item in Items) { cell = sheet.Cells[i, 1]; cell.Value = item.FirstName; cell.ColumnWidth = 30; cell = sheet.Cells[i, 2]; cell.Value = item.LastName; cell.ColumnWidth = 40; i++; } if (firstTime) { firstTime = false; excel.SheetChange += new SheetChangedDelegate(SheetChangedEventHandler); } }
Grazie alla classe AutomationFactory (e ai nuovi dynamic) andiamo a creare un oggetto "Excel" nel quale aggiungiamo un workbook ed uno sheet.
Scorrendo gli elementi della nostra collezione di dati aggiungiamo progressivamente le celle ed i corrispondenti valori.
Grazie alla proprietà Visibile dell'oggetto "Excel" l'applicazione viene aperta automaticamente visualizzando i dati appena aggiunti.
Una ulteriore funzionalità interessante è la possibilità di mantenere collegati i dati aggiunti al foglio di Excel con i dati "sorgente", nell'esempio in binding nel datagrid.
Attraverso l'evento SheetChange possiamo intercettare la modifica dei dati in Excel e fare in modo che le modifiche si riflettano automaticamente nell'applicazione, così come realizzato nello snippet seguente.
private void SheetChangedEventHandler(dynamic excelSheet, dynamic rangeArgs) { dynamic sheet = excelSheet; dynamic range1 = sheet.Range("A1:A" + Items.Count); for (int i = 0; i < Items.Count; i++) { Items<i>.FirstName = (range1.Item(i + 1).Value == null) ? string.Empty : range1.Item(i + 1).Value.ToString(); } dynamic range2 = sheet.Range("B1:B" + Items.Count); for (int i = 0; i < Items.Count; i++) { Items<i>.LastName = (range2.Item(i + 1).Value == null) ? string.Empty : range2.Item(i + 1).Value.ToString(); } }
Nelle immagini sottostanti possiamo vedere l'interazione dei dati in tempo reale.
Nel nostro articolo su
https://www.silverlightitalia.com/articoli/silverlight/novita-silverlight-4.0.aspx
è possibile conoscere le nuove funzionalità disponibili in Silverlight 4.0.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Creare un messaggio di posta in diversi formati con ASP.NET 2.0
- Caricare un DTO esposto da un servizio tramite una query LINQ to Entities in Entity Framework
- Utilizzare il metodo reduce in #javascript https://aspit.co/ccc di @morwalpiz
- Elencare gli utenti di un dominio NT con ADSI
- Utilizzare SQL e #linq per eseguire una query con #entityframework Core https://aspit.co/bfv di @sm15455 #efcore1
- Disponibile il codice sorgente di ASP.NET MVC
- Concludiamo in bellezza con Giancarlo Sudano di Microsoft: q# for quantum programming Siamo in live streaming da: https://aspit.co/netconf-22 #aspilive #netconfit
- Caricare i dati di configurazione allo startup di un'applicazione Angular
- rilasciati nuovi template per la #aspnet web pages. funzionano anche con #webmatrix: http://u.aspitalia.com/lu
- Creare automaticamente una pipeline YAML da una sua definizione in Azure DevOps