Tips

WPF e l'ereditarietà degli stili

Gli Style di WPF sono certamente uno strumento molto comodo. Una caratteristica interessante degli Style è che uno ne può estendere un altro. Supponiamo di avere la seguente definizione: <Style x:Key="MainControlStyle" TargetType="{x:Type Control}" > <Setter Property="FontSize" Value="10" /> <Setter Property="FontWeight" Value="Normal" /> <Setter Property="Padding" Value="2" /> </Style> <Style TargetType="{x:Type Label}" BasedOn="{StaticResource MainControlStyle}" > <Setter...

WPF - Usare più file di risorse

Può capitare di volere fare riferimento a più file di risorse all'interno di una Window o di uno UserControl e farli magari convivere con le risorse definite localmente. La classe ResourceDictionary ci viene incontro con la proprietà MergedDictionary. <Window.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="../../MainResources.xaml" /> <ResourceDictionary Source="../../Styles.xaml" /> </ResourceDictionary.MergedDictionaries> <DataTemplate x:Key="MyTemplate"> ...

WPF DataGrid e aggiunta di righe ad ItemSource

Un piccolo tip per mostrare una riga di aggiunta elemento nella DataGrid del WPF Control Toolkit. Ho una DataGrid il cui ItemSource è bindato ad una proprietà di tipo ObservableCollection<MioTipo>; inoltre la proprietà CanUserAddRows è impostata a True. Qualcosa di questo tipo insomma: <ToolKit:DataGrid AutoGenerateColumns="False" CanUserAddRows="True" CanUserSortColumns="True" Margin="5,5,5,5" Name="Items" ItemsSource="{Binding Path=OrderItems}"> <ToolKit:DataGrid.Columns> ... </ToolKit:DataGrid.Columns> </ToolKit:DataGrid> Ebbene la...

XmlSerializer e serializzazione personalizzata

Personalizzare l'XML prodotto dalla serializzazione di una classe con XmlSerialization è motlo semplice; è sufficiente infatti far implementare alle classi coinvolte nella serializzazione l'interfaccia IXmlSerializer. Voglio mostrarvi un esempio: ho avuto la necessità di serializzare una classe che conteneva alcune liste di altre classi; il documento prodotto non doveva raggruppare le varie liste in nodi che rappresentavano le proprietà, ma elencare tutte le istanze sotto il nodo radice. La classi di esempio: public class InterfaceIn : IXmlSerializable { public List<Field>...

Aprire un file col programma predefinito

Ecco un piccolo tip per aprire un file in c#, in modo del tutto analogo alla cara vecchia ShellExecute System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = path; proc.StartInfo.UseShellExecute = true; proc.Start(); Non so se sia l'unico modo; sicuramente è un modo semplice ed efficace   Matteo   Technorati Tag: ShellExecute

SqlServer Compact 32 bit in ambiente a 64 bit

Se vi capita di usare Visual Studio 2008 su una macchina con, ad esempio, un Windows Vista a 64 bit per creare una applicazione con SqlServer Compact a 32 bit, potreste imbattervi in un errore col seguente messaggio: ...Could not load file or assembly or one of its dependencies. An attempt was made to load a program with an incorrect format... A me è successo e ci ho messo un po a capire che era colpa della mia disattenzione. Le soluzioni sono due: la prima è che se...

Routed Event e TreeView

I Routed Event sono stati introdotti con l'avvento di WPF; molto in sintesi, sono eventi che vengono propagati lungo tutto l'albero di controlli della nostra Window, ammettendo quindi gestori multipli: per esempio se abbiamo uno StackPanel con dentro un Button con dentro una Image, l'evento click generato dal click del mouse sulla Image verrà propagato anche al Button e in seguito allo StackPanel. Qui potrete trovare maggiori info. Di seguito invece un piccolo tip per l'uso delle TreeView. Ho implementato un piccolo programmino che prevede la rappresentazione di dati in un albero e la gestione del Drag and Drop....

Entity Framework e l'attributo ProviderManifestToken

Per una mia applicazione ho creato un EDM a partire da un DB presente su una istanza Sql Server 2005. Per testare l'applicazione, per ragioni che non mi è dato sapere, mi è stato fornito un accesso ad una istanza di Sql Server 2000. Apparentemente l'applicazione funzionava ancora, sennonché, in alcuni casi, veniva sollevata una eccezione con questo messaggio: line 43: Incorrect syntax near '('. Girovagando per il web ho scoperto l'esistenza di un attributo del file SSDL, il ProviderManifestToken. Impostando questo attributo a 2000 anzichè 2005, il problema non veniva più sollevato a...

WCF, Proxy ed errore 407

Ho installato una serie di servizi in un ambiente di test, all'interno di una LAN che fa uso di un proxy per l'accesso ad internet. Dopo aver configurato il tutto, ho eseguito il client per verificare che l'applicazione funzionasse correttamente; il risultato è stato questo: "The remote server returned an unexpected response: (407) Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy service is denied.  )." Un po' stranito da questo errore, visto che consideravo che le chiamate ad indirizzi locali bypassassero (oddio che termine)...

Linq ti cambia la vita! - Part II

Volevo fare un altro post (dopo questo) su come l'introduzione di Linq ti permetta di fare operazioni complesse su collezioni (insiemi) di dati, in modo, a mio parere, più facile ed intuitivo. In questo esempio devo aggregare un insieme di oggetti, denominati transazioni. Questi oggetti hanno un codice e una serie di abilitazioni rappresentate da variabili booleane. Le regole di aggregazione sono queste: devo estrarre transazioni distinte per codice, e fare l'unione delle abilitazioni di tutte le transazioni con lo stesso codice. Il tutto si traduce nella seguente query: ...

Deploy del Framework .NET 3.5 SP1 - Part II

Mi rifaccio al post precedente per una importante aggiunta Se dopo aver pubblicato l'applicazione, eseguendo l'installer da remoto, il download dei file dovesse interrompersi col seguente errore: Downloading failed with HRESULT=-2146697210 dovete controllare che il vostro application server (il server su cui l'applicazione è pubblicata) abbia i seguenti MIME impostati .msp --> application/microsoftpatch .msu --> application/microsoftupdate Il mio non li aveva e, aggiungendoli e riavviando il sito web che ospita l'applicazione, il download ha ripreso dal punto in cui si era fermato ;) !   Matteo ...

Deploy del Framework .NET 3.5 SP1

Chi volesse includere nelle applicazioni pubblicate tramite ClickOnce il Framework .NET 3.5 SP1, per renderlo scaricabile direttamente dal sito dell'applicazione, trova a questo link informazioni utili.   Matteo     Technorati Tag: .Net Framework 3.5 SP1,ClickOnce,Deploy

Sql Server Compact, Identity ed Entity Framework

Correggo il tiro sul mio precedente post e sottolineo un'altra volta l'importanza di documentarsi bene prima di buttarsi in una "nuova" avventura. Se utilizziamo Sql Compact con Entity Framework dobbiamo dire addio ai campi Identity, anzi dobbiamo rinunciare a qualsiasi campo auto generato dal db. Quindi le chiavi delle nostre tabelle dovranno essere sempre e comunque dei valori calcolati dall'applicazione.   Matteo Fontana   Technorati Tag: Sql Server CE,Entity Frameowork

WPF Binding

La prima cosa del Binding di WPF che mi ha piacevolmente colpito è la possibilità di gestire le 'dipendenze' tra due controlli: ovvero di poter rendere il contenuto di un controllo dipendente dallo stato di un altro controllo. Faccio un piccolo esempio. Supponiamo di volere creare una lista di elementi al quale abbiamo associato una nota, che vogliamo visualizzare all'interno di una TextBox. Per fare ciò basta poco codice Xaml: <DataGrid Name="ElementsList"...> ... </DataGrid> <TextBox Name="txtNote" Text="{Binding Path=SelectedItem.Value, ElementName=ElementsList}" /> In questo modo non dobbiamo preoccuparci di gestire eventi particolari per popolare la nostra TextBox. Ogni volta che selezioniamo...

DataGrid e Binding OneWay

Come detto nel post precedente sto cominciando, finalmente, a provare WPF, con un progettino semplice semplice. Quale posto migliore del blog per prendere appunti? Cominciamo dalla Datagrid del WPF Control Toolkit. Ho la necessità di visualizzare una lista di Entity all'iterno della DataGrid. Alcune proprietà di queste Entity sono in sola lettura; ho pensato quini di impostare il Binding sulla colonna come 'OneWay': <my:DataGridTextColumn Binding="{Binding Path=GrossTotal, Mode=OneWay}" Header="Totale" /> Questo non è sufficiente; anzi genera pure una eccezione in fase di bind. Il motivo è che la DataGrid imposta di default il Binding Mode a 'TwoWay'...

WCF ed Eccezioni

I servizi esposti con WCF (come i Web Service in genere) non usano le eccezioni standard, ma devono usare dei messaggi particolare per notificare gli errori. Per rendere il sistema di notifica degli errori assimilabile alla gestione delle eccezioni standard il namespace System.ServiceModel mette a disposizione una eccezione, FaultException, che rappresenta un messagio fault di SOAP. FaultException mette a disposizione una serie di proprietà che permettono già di specificare una serire di informazioni relativi all'eccezione sollevata, come il FaultCode e la FaultReason. Nel caso si volesse scambiare una serie di informazioni aggiuntive, specifiche della nostra applicazione, ci viene...

Transaction Scope e Connessioni

Transaction Scope gestisce le transazioni facendo un Enlist automatico di ogni connessione aperta all'interno dello Scope, alla transazione esistente, promuovendo quest'ultima a distribuita ogni volta che più di una connessione (anche verso lo stesso DB) viene aperta all'interno dello scope. Se si vuole gestire a mano (o escludere) l'Enlist di una connessione, è possibile specificare all'interno della CennectionString il parametro enlist=false che disabilita l'enlist automatico per la Connessione.   Matteo   Technorati Tag: Transaction Scope,Sql Server

Metodi asincroni senza risposta in WCF

Un semplicissimo tip per WCF. Se si vuole definire un metodo su un servizio WCF che non ritorni un messaggio di risposta e sia quindi asincrono è sufficiente indicare il parametro IsOneWay=true all'interno dell'attributo OperationContract come nell'esempio: [ServiceContract] public interface IService { [OperationContract(IsOneWay=true)] void WakeUp(string userName); }   Matteo   Technorati Tag: WCF,Metodi Asincroni,OperationContractAttribute

WCF e DataContract: errore durante la serializzazione

Ho da poco eseguito un profondo refactoring su un mio progetto cambiando i DataContract scambiati dai miei servizi. Alcuni metodi di un mio servizio hanno cominciato ad avere un comportamento un po' bizzarro dopo questo cambiamento: in pratica, all'invocazione del metodo, veniva sollevata una eccezione con questo messaggio: An error occurred while receiving the HTTP response to 'http://.../Service'. This could be due to the service endpoint binding not using the HTTP protocol. This could also be due to an HTTP request context being aborted by the server (possibly due to the service shutting down). See server...

Debug di stored procedure in SQL Server 2005

Il debug delle stored procedure di Sql Server 2005 è stato integrato all'interno di Visual Studio. Per poter debuggare una Stored Procedure è sufficiente connettersi col Server Explorer al DB desiderato, sfogliare le Stored Procedure e, cliccando col tasto destro sulla Stored, selezionare nel menu di contesto la voce "Step into Stored Procedure"; a questo punto vengono richiesti i valori per i parametri della Stored, e viene quindi eseguito il debug. Tutto questo funziona normalmente finchè l'istanza del database e Visual Studio sono sulla stessa macchina. Se invece risiedono su macchine diverse si deve fare una considerazioni in...

Entity SQL e risultati delle query

Sto provando Entity Sql per interrogare il mio dominio con query create dinamicamente e mi sono imbattuto in un problema: vorrei che la query ritornasse un Set di Entity del mio dominio, mentre se eseguo una query in questo modo: query = "select c from GestionaleEntities.Customers as c where (c.CustomerCode = 'C0001')"; this.dataContext.CreateQuery<Customers>(query).ToList(); viene generata una eccezione con questo messaggio: {"Specified cast from a materialized 'System.Data.Objects.MaterializedDataRecord' to 'Techsol.Gestionale.Domain.Customers' is not valid."} dal quale si deduce che il tipo ritornato dalla query, ovvero un generico MaterializedDataRecord, non è proprio il tipo che mi aspettavo ovvero delle istanze delle mie...

"Pubblicare" i membri internal

Un tip vecchio come il cucco, ma visto che mi è servito stamattina dopo un po' di tempo, me lo segno anche sul blog. Per necessità di testing ho dovuto rendere visibili all'assembly contenente i miei test alcuni membri internal definiti in un altro assembly . Con la seguente riga nel file AssemblyInfo dell'assembly contenente i mebri internal è possibile definire quali altri assembly possono accedervi come se fossero public [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("_NomeAssembly_")] [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("_NomeAltroAssembly_")]   Matteo   Technorati Tag: C#,Internal,Assembly

Eliminare Progetti da TFS

Iniziando ad usare TFS ho creato un paio di progetti di prova per cominciare ad approfondire i concetti relativi a MSF. Avendo smanettato sull'installazione di produzione ho avuto la necessità di rimuovere i progetti dal server. All'interno della cartella "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE" si trova una utility a linea di comando chiamata TFSDeleteProject.exe Per eliminare un progetto è sufficiente eseguire questo comando: TFSDeleteProject /q /server:NomeServer /force "Nome Progetto"   Matteo Technorati Tag: TFS

Entity Framework e vincoli sul mapping

Una cosa che mi piace di Entity Framework è che ti supporta a compile time durante la creazione dei mapping aiutandoti a non crearne di "scorretti" o potenzialmente dannosi. Mi è capitato di creare un Domain a partire da un database molto vecchio e mal concio e devo dire che gli errori di compilazioni mi sono serviti non poco a creare un mapping corretto e funzionante. Una su tutte me la voglio segnare perchè mi ha fatto perdere un po' di tempo. Le chiavi esterne, non essendo associate a dei vincoli di Foreign Key sul DB, mi venivano "tirate...

SQL Server 2008 Management Studio Tip

Ho cominciato ad usare il Management Studio di Sql Server 2008 e mi sono accorto che di default non ti permette di eseguire modifiche alle tabelle che implicano la ricreazione della tabella stessa. Io la ho trovata una opzione alquanto fastidiosa, almeno in fase di definizione della struttura quando le modifiche sono all'ordine del giorno. Comunque per disabilitare questa opzione basta seguire il percorso Strumenti --> Opzioni --> Finestre di Progettazione --> Progettazione tabelle e Progettazione database e dentro a questo finestra deselezionare il check "Impedisci il salvataggio delle modifiche per cui è necessario ricreare la tabella", come visibile nell'immagine...