giovedì 24 settembre 2009

Gestire l’evento AddingNew del BindingSource

Uno dei “problemi” da risolvere durante la gestione degli oggetti DataGridView collegati ad una tabella tramite BindingSource è quella di “riuscire” a inizializzare con dei propri dati le nuove righe generate.

Tra gli eventi di BindingSource c’è AddingNew.

Come si potrà notare l’esempio di MSDN è del tutto inutilizzabile e non funzionante in quanto prende i dati da un metodo inesistente “democustomer” tralasciando la parte più importante!.

L’evento AddNew gestito:

'serve per attribuire valori calcolati a caso
Dim rnd As New System.Random(DateTime.Now.Second)
'definizione di un oggetto di tipo DataRowView
'ogni riga visualizzata è rappresentata da un oggetto
'di tipo DataRowView
Dim rowView As DataRowView = CType(BindingSource1.List, DataView).AddNew
'a sua volta DataRowView è collegato ad un DataRow il quale è collegato all'origine dati
Dim newRow As DataRow = CType(rowView.Row, DataRow)
'attribuzione di valori arbitrari
rowView("Descrizione") = String.Format("{0} {1}", "Test", rnd.Next(1, 100))
rowView("Valore") = Math.Round(rnd.NextDouble() * 100, 3)
'scrittura nell'oggetto sottostante in creazione
e.NewObject = rowView

L’esempio C#
L’esempio Visual Basic

sabato 19 settembre 2009

Gestire l'apertura di più Forms Tramite La Reflection con Visual Basic

Un piccolo esempio di apertura di più forms tramite la System.Reflection.

 

Nel medesimo progetto c’è una form principale “MainForm”  e di 3 forms secondarie, nella form principale ci sono 2 controlli una comoda combobox e un bottone.
La combobox “contiene” tanti items quante forms secondarie appartengono al progetto, ciascun item riporta il nome di una singola form.

All’inizializzazione è richiamato il metodo AggiungiForm che si occupa di estrarre i nomi delle forms secondarie dall’Assembly.

Private Sub AggiungiForm()
   Dim asmbly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
  
For Each t As Type In asmbly.GetTypes()
       If t.BaseType.Equals(GetType(Form)) AndAlso Not (t Is Me.GetType) Then
            Me.comboBox1.Items.Add(t.Name)
       End If
   Next
End Sub

Si possono notare le seguenti cose:

  1. Definizione di un oggetto di Tipo Assembly 
  2. Utilizzo della For Each per estrarre la lista dei Tipi presenti nell’Assembly (è noto che ogni oggetto ha il proprio tipo che lo contraddistingue).
  3. Per le forms che come base hanno System.Windows.Forms.Form ad esclusione della form corrente è estratto il  nome che è aggiunto alla ComboBox (da notare l’utilizzo di BaseType per le form secondarie e del costrutto Is per la form principale).

La ComboBox si presenta così con la lista delle forms presenti nel progetto.

Il click sul Button richiama un altro metodo ApriFormByName che si occupa del lavoro “sporco” :) e cioè tradurre il nome in un oggetto / tipo specifico e richiamare il costruttore di questo.

Il metodo ApriFormByName:

Private Sub ApriFormByName(ByVal formName As String, ByVal namespaceName As String)

        Dim fullName As String = namespaceName
        Try
            If namespaceName Is Nothing Then
                Dim asm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
                fullName = asm.GetName.Name
            End If

            If Not fullName.EndsWith(".") Then
                fullName += "."
            End If
            fullName += formName
            Dim oFormType As Type = Type.GetType(fullName, True, True)
            CType(oFormType.GetConstructor(System.Type.EmptyTypes).Invoke(Nothing), Form).Show()
        Catch ex As Exception
            MessageBox.Show(ex.Message + " " + ex.StackTrace)
        End Try

    End Sub

Il flusso delle operazioni è molto semplice:

  1. Viene impostata una stringa con il nome qualificato (comprensivo dell’assembly) della form da richiamare
  2. E’ richiamato il costruttore della form prescelta, spero sia noto che richiamare il costruttore (New) genera un nuovo oggetto del tipo indicato: CType(oFormType.GetConstructor(System.Type.EmptyTypes).Invoke(Nothing), Form).Show()

E’ disponibile il sorgente del programma scritto con SharpDevelop e Visual Studio 2008

Powered with Windows Live Writer

sabato 5 settembre 2009

Riparare installazione Copilot 7 dopo aggiornamento ROM

Dopo aver installato un aggiornamento della ROM sul mio HTC Touch Pro 2 con Windows Mobile 6.1

 

Ho scoperto che Copilot 7 non funzionava più.

L’ipotesi di cancellare tuto e ripartire con una nuova installazione proprio non mi andava.

Visto che l’installazione l’ho fatta su una sk di memoria e questa NON è stata coinvolta o toccata dall’aggiornamento della ROM ho semplicemente fatto una verifica tra e la memory card e l’intero installer.

Ho riscontrato che l’unico file degno di nota (.cab) presente nell’installer ma non nella memory card del mio dispositivo era “copilot.wm6ppc.cab” presente nella cartella “2577”.

Ho copiato il file dalla cartella 2577 dell’installer alla cartella 2577 del mio HTC.

Dal dispositivo ho poi navigato fino alla cartella 2577 e ho eseguito l’installazione del cab.

E’ partito con un avviso che avvertiva che era necessario disinstallare la versione precedente (ok) visto che l’aggioirnamento della ROM aveva spazzato via le installazioni non c’era nulla da disinstallare, poi è proseguito con la normale installazione che dopo un pò è terminata con un errore di instlalazione.

Ho provato poi a partire con Copilot, è comparsa la schermata di impostazione della chiave di installazione già popolata con i valori introdotti durante la prima installazione, dopo aver confermato la chiave è partita la configurazione del gps e Copilot si è presentato con tutti i miei viaggi/preferiti già presenti.

Spero che a qualcuno la cosa sia utile, in ogni caso è utile a me come mio promemoria per futuri aggiornamenti della ROM.. sto pensando a Windows Mobile 6.5 che ho sentito HTC distribuirà nel propri prodotti a partire da ottobre 2009, spero ci sia la possibilità di far un upgrade.

Powered with Windows Live Writer

Archivio Sportelli Bancari - Elenco Abi Cab Aggiornato a Fine Agosto 2009

L'archivio sportelli bancari elenco Abi Cab aggiornato a fine Agosto 2009 è disponibile per lo scaricamento a questo indirizzo:
Alcune informazioni sui files:
- campi separati da tabulazione hex: 09
- righe separate dal terminatore di riga windows hex: 0d0a
- intestazione colonne sulla prima riga
Il file TabAbi contiene i dati relativi alle banche.
Il file TabAbiCab contiene le informazioni relative agli sportelli
Nel file TabAbi e TabAbiCab è presente il campo "Aggiornamento" che evidenzia la data di riferimento di validità dei dati.
Tutte le righe di TabAbiCab che NON contengono la data più recente sono da considerarsi relative a sportelli non più attivi o assorbiti da altre banche, tali sportelli sono presenti solo come log dei dati storici, ne è sconsigliato l'utilizzo per nuove emissioni di flussi di comunicazione con le banche.
Questo archivio è da considerarsi frutto di una rielaborazione "amatoriale" dei dati degli sportelli bancari reperibili in rete l'unico mio apporto è l'aggiunta della data di ultima importazione in modo tale da costituire un archivio comprendente anche i dati di banche e sportelli non più attivi.
Non si rivendica nessun diritto riguardo al contenuto del file, l'utilizzatore ne può fare ciò che vuole senza contattarmi nè informarmi della cosa, preferirei inoltre non essere neanche citato come fonte in eventuali successive redistribuzioni.
Se si vuole una garanzia circa la correttezza dei dati e/o una qualsiasi licenza il mio consiglio è di NON utilizzare il presente archivio e di rivolgersi direttamente alla propria banca chiedendo di avere in forma ufficiale il file degli sportelli bancari.
I ringraziamenti sono comunque graditi.
Se sentite il malsano bisogno di farmi pervenire una somma di denaro, scegliete l'organizzazione umanitaria a voi più gradita e fate a questa il vostro pagamento.

Powered with Windows Live Writer