domenica 15 giugno 2008

CF utilizzare le api di Windows Mobile, per effettuare le telefonate o rilevare informazioni alla SIM tramite C#

Questo esempio di codice, illustra come utilizzare le api di Windows Mobile, per effettuare delle telefonate e rilevare informazioni della SIM.


Effettuare una telefonata:


Namespace:


using System.Runtime.InteropServices;


A livello di classe creare la seguente struttura e i due campi.


private static long PMCF_DEFAULT = 0x00000001;


private static long PMCF_PROMPTBEFORECALLING = 0x00000002;


private struct PhoneMakeCallInfo


{


public IntPtr cbSize;


public IntPtr dwFlags;


public IntPtr pszDestAddress;


public IntPtr pszAppName;


public IntPtr pszCalledParty;


public IntPtr pszComment;


}


Dichiarazione di api per effettuare la telefonata


[DllImport("phone.dll")]


private static extern IntPtr PhoneMakeCall(ref PhoneMakeCallInfo ppmci);


Funzione che effettua la chiamata


unsafe private void Telefona(string numero)


{


bool avvisa = true;


IntPtr res;


//numero += '\0';


char[] cPhoneNumber = numero.ToCharArray();


fixed (char* pAddr = cPhoneNumber)


{


PhoneMakeCallInfo info = new PhoneMakeCallInfo();


info.cbSize = (IntPtr)Marshal.SizeOf(info);


info.pszDestAddress = (IntPtr)pAddr;


if (avvisa)


{


info.dwFlags = (IntPtr)PMCF_PROMPTBEFORECALLING;


}


else


{


info.dwFlags = (IntPtr)PMCF_DEFAULT;


}


res = PhoneMakeCall(ref info);


}


}


Eseguire la funzione per effettuare la chiamata


private void btnChiama_Click(object sender, EventArgs e)


{


Telefona("4250010001");


}



Rilevare il numero di telefono, individuare gli sms che si possono ricevere ed il numeri di quelli ricevuti.


Dichiarazione a livello di classe


//Identificazione numero


public enum AddressType


{



Unknown,



International,



National,



NetworkSpecific,



Subscriber,



Alphanumeric,



Abbreviated


}


//informazioni numero


public struct PhoneAddress


{


/// <summary>The address type.</summary>


public AddressType AddressType;


/// <summary>The phone number in string format.</summary>


public String Address;


}


private static long SERVICE_PROVIDER = 0x00006F46;


[StructLayout(LayoutKind.Sequential)]


private struct SimRecord


{


public IntPtr cbSize;


public IntPtr dwParams;


public IntPtr dwRecordType;


public IntPtr dwItemCount;


public IntPtr dwSize;


}


Dichiarazione api


[DllImport("sms.dll")]


private static extern IntPtr SmsGetPhoneNumber(IntPtr psmsaAddress);


[DllImport("cellcore.dll")]


public static extern int SimInitialize(uint dwFlags, int lpfnCallBack, uint dwParam, ref int lphSim);


//private static extern IntPtr SimInitialize(IntPtr dwFlags, IntPtr lpfnCallBack, IntPtr dwParam, out IntPtr lphSim);


[DllImport("cellcore.dll")]


private static extern IntPtr SimGetRecordInfo(IntPtr hSim, IntPtr dwAddress, ref SimRecord lpSimRecordInfo);


[DllImport("cellcore.dll")]


private static extern IntPtr SimReadRecord(IntPtr hSim, IntPtr dwAddress, IntPtr dwRecordType, IntPtr dwIndex, byte[] lpData, IntPtr dwBufferSize, ref IntPtr lpdwBytesRead);


[DllImport("cellcore.dll")]


private static extern IntPtr SimDeinitialize(IntPtr hSim);


[DllImport("cellcore.dll")]


public static extern int SimGetSmsStorageStatus(int hSim, uint dwStorage, ref uint lpdwUsed, ref uint lpdwTotal);


Funzione che rileva il numero del telefono e tipo


unsafe private PhoneAddress GetPhoneNumber()


{


PhoneAddress phoneaddr = new PhoneAddress();


Byte[] buffer = new Byte[516];


fixed (byte* pAddr = buffer)


{


IntPtr res = SmsGetPhoneNumber((IntPtr)pAddr);


if (res != IntPtr.Zero)


throw new Exception("Could not get phone number from SIM");


byte* pCurrent = pAddr;


phoneaddr.AddressType = (AddressType)Marshal.ReadInt32((IntPtr)pCurrent);


pCurrent += Marshal.SizeOf(phoneaddr.AddressType);


phoneaddr.Address = Marshal.PtrToStringUni((IntPtr)pCurrent);


}


return phoneaddr;


}


Richiamare la funzione da un evento click del pulsante (numero telefono e tipo)


private void btnnumero_Click(object sender, EventArgs e)


{


string informazioni = "Numero: " + GetPhoneNumber().Address + " Tipo: " + GetPhoneNumber().AddressType;


MessageBox.Show(informazioni);


}


Richiamare la funzione da un evento click di un pulsante per la gestione degli sms (totali e ricevuti)


private void btnSms_Click(object sender, EventArgs e)


{


int hSim = 0;


uint smsUsed = 0;


uint smsTotal = 0;


uint SIM_SMSSTORAGE_SIM = 0x2;


SimInitialize(0, 0, 0, ref hSim);


SimGetSmsStorageStatus(hSim, SIM_SMSSTORAGE_SIM, ref smsUsed, ref smsTotal);


MessageBox.Show("Sms Usati: " + smsUsed.ToString());


MessageBox.Show("Sms Totali: " + smsTotal.ToString());


}


Tramite la parola download è possibile scaricare il file di esempio


Download

mercoledì 11 giugno 2008

Compact Framework 1.1 avviare un processo tramite VB.Net e c#

In questo esempio di codice, vedremo come utilizzare le api di Windows Mobile, per avviare un programma eseguibile.
In alternativa al metodo start della classe process (il cf 1.1 non ne dispone) per avviare i vari processi, si può ricorrere alla dichiarazione di api (CreateProcess) per avviare un determinato programma.
Di seguito si riporta un esempio di codice.
Dichiarazione di Api e struttura


VB.Net


Declare Function CreateProcess Lib "coredll.dll" (ByVal imageName As String, ByVal cmdLine As String, ByVal lpProcessAttributes As IntPtr, ByVal lpThreadAttributes As IntPtr, ByVal boolInheritHandles As Int32, ByVal dwCreationFlags As Int32, ByVal lpEnvironment As IntPtr, ByVal lpszCurrentDir As IntPtr, ByVal si As Byte(), ByVal pi As ProcessInfo) As Integer


Public Class ProcessInfo


Public hProcess As IntPtr


Public hThread As IntPtr


Public ProcessId As Int32


Public ThreadId As Int32


End Class


C#


[DllImport("coredll.dll", SetLastError = true)]


static extern bool CreateProcess(String imageName,


String cmdLine,


IntPtr lpProcessAttributes,


IntPtr lpThreadAttributes,


bool boolInheritHandles,


Int32 dwCreationFlags,


IntPtr lpEnvironment,


IntPtr lpszCurrentDir,


byte[] si,


ProcessInfo pi);


public class ProcessInfo


{


public IntPtr hProcess;


public IntPtr hThread;


public Int32 ProcessId;


public Int32 ThreadId;


}


Codice da inserire in un evento click di un pulsante



VB.Net


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click



Dim pi As New ProcessInfo


Dim si(128) As Byte


Dim resultato As Int32



resultato = CreateProcess("calc.exe", "", IntPtr.Zero, IntPtr.Zero, 0, 0, IntPtr.Zero, IntPtr.Zero, si, pi)





End Sub


C#


private void button1_Click(object sender, EventArgs e)


{


ProcessInfo pi = new ProcessInfo();


byte[] si = new byte[128];


bool resultato = CreateProcess("calc.exe", " ", IntPtr.Zero, IntPtr.Zero, false, 0, IntPtr.Zero, IntPtr.Zero, si, pi);



}


Tramite la parola download è possibile scaricare il file di esempio.

Download esempio

download Componente aggiuntivo Microsoft SQL Server 2008 Reporting Services per le tecnologie Microsoft SharePoint

Vi segnalo un nuovo aggiornamento per sharepoint 2007 e Sql server 2008.
Da questo sito http://www.microsoft.com/downloads/details.aspx?FamilyID=c67a9276-bc20-444c-b60d-8500f4b8d713&DisplayLang=it potete scaricare un componente gratuito, in particolare un componente aggiuntivo Microsoft SQL Server 2008 Reporting Services per le tecnologie Microsoft SharePoint è un download Web che include funzionalità per l'esecuzione di un server di report nell'ambito di una distribuzione più estesa di Windows SharePoint Services 3.0 o Microsoft Office SharePoint Server 2007.
Per il download e maggiori informazioni, visitate il sito indicato.

martedì 10 giugno 2008

sharepoint 2007 impostare il valore di un campo in Windows Workflow Foundation

Il frammento di codice riportato qui di seguito, permette di impostare un campo di un raccolta ed elenchi sito.
In pratica, se abbiamo creato una colonna chiamata valoreA, possiamo impostare da un workflow il suo valore.
Di seguito si riporta il codice di tale operazioni:

VB.Net
dim item as SpListItem = workflowProperties.Item
item("valoreA") = "A"
item.Update()

C#

SPListItem item = workflowProperties.Item;
item["valoreA"] = "A";
item.Update();

Blog relativi al compact framework

Vi segnalo questo sito http://blog.opennetcf.com/ dove si possono leggere interessanti post, dei vari blogger in ambito Compact Framework.
La comunità opennetcf, da alcuni anni, offre un notevole contributo per coloro che lavorano in ambito dello sviluppo software sul palmare o smartphone.
Che dirvi.. buona lettura :-)))

domenica 8 giugno 2008

Free Silverlight Datagrid from DevExpress

Per coloro che utilizzano silverlight, possono trovare interessante questo componente http://www.devexpress.com/Products/NET/Components/Silverlight/Grid/ gratuito, in particolare un datagrid da utilizzare in silverlight.
Dal post di Joe Stagner http://blogs.msdn.com/joestagner/archive/2008/06/08/free-silverlight-datagrid-from-devexpress.aspx

sabato 7 giugno 2008

Asp.Net paginazione di un controllo gridView

Per il sito iprogrammatori http://www.iprogrammatori.it/articoli/programmazione/paginazione_controllo_gridview.asp



Figura 1


Introduzione:


In questo articolo, vedremo come applicare ad un controllo GridView (Asp.Net) la paginazione ed inserire nella prima colonna un pulsante per il rilevamento del dato della riga a cui si è fatto click. Si crea un nuovo progetto Web, inseriamo nella nuova pagina, un controllo gridView ed una label, l'aspetto dev'essere simile come mostrato in figura 1.


Fatto ciò si creano tre colonne per il controllo gridView, due di tipo boundfield ed una tipo buttonField


Di seguito è riportato il frammento di codice delle suddette operazioni.


<Columns>


<asp:ButtonField ButtonType="Button" CommandName="Seleziona" Text="Seleziona" />

<asp:BoundField DataField="Valore A" HeaderText="Valore A" />

<asp:BoundField DataField="Valore B" HeaderText="Valore B" />

<>Columns>

Impostare le proprietà del controllo GridView.


Per applicare la paginazione ad un controllo GridView, occorre impostare a true la proprietà "AllowPaging" del controllo, fatto ciò si imposta la proprietà EnabledSortingAndPagingCallBacks a true (figura 2), in questo modo ci permette di evitare di scrivere il codice per la gestione della paginazione, tale proprietà indica se deve essere eseguito il rendering dello script client per l'ordinamento e la paginazione ai client browser che supportano il callback. La proprietà pageSize, la impostiamo a 5, in questo modo avremo per ogni pagina 5 record.






Figura 2


A questo punto non ci resta, che scrivere nell'evento load della pagina, il codice per il caricamento dei dati nel controllo gridiview.


Di seguito si riporta il frammento di codice per il caricamento dei dati, il dataTable, verrà popolata con 15 righe.


VB.Net


Dim dtcColonnaA As New DataColumn("Valore A")

Dim dtcColonnaB As New DataColumn("Valore B")

Dim dttDati As New DataTable()

dttDati.Columns.Add(dtcColonnaA)


dttDati.Columns.Add(dtcColonnaB)


For conta As Integer = 1 To 15

Dim dtrRiga As DataRow = dttDati.NewRow()

dtrRiga(0) =

"Valore A di " & conta

dtrRiga(1) =

"Valore B di " & conta

dttDati.Rows.Add(dtrRiga)


Next

GridView1.DataSource = dttDati


GridView1.DataBind()



C#


DataColumn

dtcColonnaA = new DataColumn("Valore A");

DataColumn dtcColonnaB = new DataColumn("Valore B");

DataTable dttDati = new DataTable();

dttDati.Columns.Add(dtcColonnaA);


dttDati.Columns.Add(dtcColonnaB);


for (int conta = 1; conta < 16; conta++)

{


DataRow dtrRiga = dttDati.NewRow();

dtrRiga[0] =

"Valore A di " + conta;

dtrRiga[1] =

"Valore B di " + conta;

dttDati.Rows.Add(dtrRiga);


}


GridView1.DataSource = dttDati;


GridView1.DataBind();


A questo punto non ci resta che eseguire la nostra pagina.


Altri consigli.


Con il metodo precedente, si è visto come dotare il controllo gridiview,di paginazione, se nel caso, lasciamo la proprietà EnabledSortingAndPagingCallBacks a false, possiamo gestire la paginazione da codice, nel seguente modo.


Nell'evento PageIndexChanging, del controllo GridView, assegniamo alla proprietà PageIndex, del gridiview il valore della proprietà NewPageIndex della classe GridViewPageEventArgs .


Di seguito si riporta il codice, che permette di gestire la paginazione del controllo.


VB.Net


Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.PageIndexChanging

GridView1.PageIndex = e.NewPageIndex


GridView1.DataBind()


End Sub

C#


protected

void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)

{


GridView1.PageIndex = e.NewPageIndex;


GridView1.DataBind();


}


Il pulsante buttonField


Tramite il pulsante buttonField, possiamo aggiungere al controllo GridView, un pulsante di comando. Di seguito si riporta un esempio di codice, che al click di tale pulsante, imposta la proprietà Text del controllo label, con il valore della prima colonna (A) della riga a cui si è fatto click sul pulsante.


VB.Net


Protected

Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand

'Verifo che il pulsante a cui si è fatto click è quello giusto


If e.CommandName = "Seleziona" Then

Dim intRiga As Integer = CType(e.CommandArgument, Integer)

lbltesto.Text = GridView1.Rows(intRiga).Cells(1).Text


End If

End Sub



C#


protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)

{


//Verifo che il pulsante a cui si è fatto click èquello giusto


if(e.CommandName == "Seleziona")

{


int riga = Convert.ToInt32(e.CommandArgument);

lbltesto.Text = GridView1.Rows[riga].Cells[1].Text;



}



}


Conclusioni:


In questo articolo, si è visto come applicare ad un controllo gridiview la paginazione senza scrivere un riga di codice, inoltre si è visto come aggiungere un pulsante di comando per rilevare determinati dati. Tramite la parola download è possibile scaricare il file di esempio.


Download

Comunità italiana per ricevere aiuto

Oggi vi segnalo una comunità, nata molti anni fa, una delle prime comunità italiane di aiuto.
Il sito http://www.ioloso.it/ è una comunità in cui le persone possono fare domande e ricevere risposte dagli esperti delle risposte.
Una volta individuata la categoria, si propone la domanda e si attende la risposta dell'esperto.
Per maggiori informazioni ed altro, visitate il sito indicato.

venerdì 6 giugno 2008

Blog su Winodws Mobile

Vi segnalo il blog di Diego Magnani consultabile dal seguetne link http://windowsmobileitaly.blogspot.com/ .
Questo sito è un blog tecnico, riguardante il mondo Windows Mobile, qui potete trovare notizie, trucchi, segnalazioni e recensioni ai palmari e smartphone, con sistema operativo Windows mobile.
L'autore del sito, da anni si occupa di informazione mobile, con una forte preparazione ed esperienza su tale argomento.

Materiale formativo per lo sviluppo in Sharepoint 2007

Vi segnalo questo interessante sito http://www.microsoft.com/click/SharePointDeveloper/ che riguarda dei percorsi formativi, in materia di sviluppo applicazioni in Sharepoint 2007.
Nel sito, troverete, video, documenti, esempi di codice e tanto altro, su questa piattaforma.
Un buon punto di partenza, per coloro che si apprestano ad utilizzare questo ambiente.

mercoledì 4 giugno 2008

Convertire Database Access in Mysql


Vi segnalo un simpatico programma gratuito, per importare il vostro database Microsoft access in Mysql. Dal post del mio amico Massimo Rabbi http://www.securnetwork.net/2008/05/25/bullzip-access-to-mysql-convertire-db-in-modo-facile/ viene segnalato un programma gratuito (scaricabile da qui http://bullzip.com/products/a2m/info.php ) per convertire il vostro database Microsoft Access in Mysql.


Da notare che in tale sito, si trovano altri simpatici programmi gratuiti.


Per il download e maggiori informazioni, visitate il sito indicato.


martedì 3 giugno 2008

Codeplex problemi

Se utilizzate internet explorer versione italiana, avrete notato qualche problema con il sito Codeplex, in particolare nella gestione dei progetti (sezione Release).
Questo è dovuto, al fatto che le impostazioni sono in lingua italiana, se cambiate le impostazioni di lingua (opzioni->lingue->inglese (stati uniti)) con la lingua inglese, il problema viene Risolto.
Un ringranziamento particolare a Seb, come riportato in questo commento http://community.visual-basic.it/Alessandro/archive/2008/06/03/22940.aspx

lunedì 2 giugno 2008

Tre video formativi per la programmazione Access

Dal blog del team di Access http://blogs.msdn.com/access/archive/2008/05/29/three-new-video-demos-on-office-online.aspx viene segnalata una notizia molto interessante, in particolare tre video formativi sulla programmazione Access.
Che dirvi... buona formazione ;-))).

Visual Studio 2008 Italiano - Problemi con le news

Per color che utilizzano Visual Studio 2008, versione italiana, possono riscontrare dei problemi nella visualizzazione delle news.
Il link corretto è il suguente http://go.microsoft.com/fwlink/?linkid=35587&clcid=409 è va applicato nella casella "Canale novità pagina iniziale" opzioni->Ambiente->avvio

domenica 1 giugno 2008

Community credit


Oggi, vi segnalo un simpatica ed interessante comunità.
Community credit http://www.community-credit.com/Default.aspx è una comunità, con più di 10000 iscritti, in questa comunità, ogni giorno si affrontano persone da tutte le parti del mondo, per aggiudicarsi il premio del mese.
Infatti, per coloro che hanno un blog o sito, riguardante argomenti tecnici (Microsoft, .Net, Asp.net, C#, VB.Net, ecc) possono segnalare in questa comunità, il loro operato ed in base alla categoria (articoli, frammenti di codice, notizie, ecc) scelta acquisire un determinato punteggio.
A fine mese chi avrà totalizzato il punteggio più alto (ci sono ben 16 posizioni) vincerà un premio, in base al piazzamento in classica.
Il bello di questa comuntià è proprio quello di invogliare le persone a partecipare attivamente alla vita delle comunità, non occorre scrivere articli, ed altro in lingua inglese ma nella propria lingua.
I premi sono davvero molto belli, simpatici, da utilizzare con il proprio pc.
Che dirvi allora .. buon divertimento ;-))).

giovedì 29 maggio 2008

Editor web gratuito usb

In questi giorni sto cercando un editor gratuito per le pagine web. Un carissimo amico, mi ha segnalato questo interessante sito http://www.sanavia.it/nvuitalia/ in cu isi trova un programma per la creazione delle pagine web.
Il programma, non necessita di installazione ed è in diverse lingue.
Scaricare il file .zip,nella pagina indicata in precedenza.

mercoledì 14 maggio 2008

Gridview applicare una colonna di tipo checkbox

Per il sito iprogrammatori http://www.iprogrammatori.it/articoli/web-marketing/controllo_checkbox_gridview.asp ho scritto un articolo, che riporto qui.





Figura 1

Introduzione

In questo articolo, vedremo come applicare in un controllo GridView un checkbox, e selezionare o deselezionare gli elementi di ogni riga.

Dopo aver creato un nuovo progetto web in Visual Studio 2005, inseriamo nella pagina web, un controllo gridview e due pulsanti, come mostra in figura 1.

Impostazione delle colonne del gridView.

Il gridView sarò composto da tre colonne, una di tipo checkbox e due che fanno riferimento ad una fonte dati (colonne di un datatable), nell'intestazione del gridiview, si troverà un checkbox che permette di selezionare e deselezionare tutti gli elementi checkbox di quella pagina.

Di seguito si riporta l'impostazione delle colonne.



<



Columns

>







<asp:TemplateField

>







<HeaderTemplate

>







<input id="Seleziona" onclick="javascript:Seleziona(this);" runat

="server"







type="checkbox"

/>







</HeaderTemplate

>







<ItemTemplate

>







<asp:CheckBox ID="chkSeleziona" runat="server" Text=" " Width="18px"

/>







</ItemTemplate

>







</asp:TemplateField

>







<asp:BoundField HeaderText="Valore A" DataField="Valore A"

/>







<asp:BoundField HeaderText="Valore B" DataField="Valore B"

/>







</Columns

>

Come mostrato dal codice html, l'evento onClick del controllo checkbox, eseguirà una funzione javascript, la quale seleziona o deseleziona i vari checkbox nel controllo.

Di seguito si riporta il codice della funzione javascript.
<

script language="javascript">

function
Seleziona(Chkbox){



var theBox= (Chkbox.type=="checkbox"
) ?Chkbox : Chkbox.children.item[0];

stato=theBox.checked;

elemento=theBox.form.elements;



for
(i=0;i<elemento.length;i++)

if(elemento[i].type=="checkbox"
&&elemento[i].id!=theBox.id)

{



if
(elemento[i].checked!=stato)elemento[i].click();

}

}
</

script>



Seleziona e deselezina elemento.

Di seguito si riporta il codice in VB.Net e C#. che permette di selezionare e deselezionare gli elementi del controllo gridview.

Questa funzione a differenza della precedente, premette di selezionare e deselezionare gli elementi direttamente dal codice VB.Net e C#.

Codice VB.Net

Private Sub Seleziona(ByVal seleziona As Boolean
)

If (seleziona = True) Then

For conta As Integer = 0 To
GridView1.Rows.Count - 1

Dim ChkDeSeleziona As CheckBox = CType(GridView1.Rows(conta).FindControl("chkSeleziona"
), CheckBox)ChkDeSeleziona.Checked =

True

Next

Else

For conta As Integer = 0 To
GridView1.Rows.Count - 1

Dim ChkSeleziona As CheckBox = CType(GridView1.Rows(conta).FindControl("chkSeleziona"
), CheckBox)ChkSeleziona.Checked =

False

Next

End If

End
Sub

Codice C#
private

void Seleziona(bool
seleziona){



if
(!seleziona){



for (int
contatore = 0; contatore < GridView1.Rows.Count; contatore++){



CheckBox ChkDeSeleziona = (CheckBox)GridView1.Rows[contatore].FindControl("chkSeleziona"
);ChkDeSeleziona.Checked =

false
;}

}



else
{



for (int
contatore = 0; contatore < GridView1.Rows.Count; contatore++){



CheckBox ChkSeleziona = (CheckBox)GridView1.Rows[contatore].FindControl("chkSeleziona"
);ChkSeleziona.Checked =

true
;}

}

}

Per selezionare l'elemento, dovrebbe eseguire la funzione passando come valore true, mentre per deselezionare tali elementi utilizzeremo false.

Di seguito si riporta un esempio di codice.
VB.Net



Protected Sub BtnSeleziona_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
BtnSeleziona.Click

Seleziona(

True
)



End Sub


Protected Sub BtnDeseleziona_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnDeseleziona.Click

Seleziona(

False
)

End Sub

C#
protected

void BtnSeleziona_Click(object sender, EventArgs
e){

Seleziona(

true
);}


protected

void BtnDeseleziona_Click(object sender, EventArgs
e){

Seleziona(

false
);}



Conclusioni:

In questo articolo, si è visto come applicare in un controllo gridiview delle checkbox e permettere la selezione e deselezione sia con il linguaggio VB.Net e sia con C#.

Tramite la parola download è possibile scaricare il file di esempio utilizzato nell'articolo.

Download



venerdì 2 maggio 2008

Creare un calendario per Microsoft Access 2007 tramite VBA.

Pubblicato sul sito iprogrammatori http://www.iprogrammatori.it/articoli/programmazione/creare_calendario_microsoft_access.asp un mio articolo riguardante la programazione Access tramite vba.
In questo articolo, vedremo come creare un calendario da utilizzare nelle maschere di Microsoft Access 2007, tramite codice Visual Basic Application. Il calendario verrà visualizzato al click di un pulsante e visualizzare in una casella di testo, la data selezionata.







Figura 1


Creazione del database.

Prima di vedere il codice Visual Basic Application, occorre creare il database, si crea un nuovo database vuoto, fatto ciò dobbiamo creare delle maschere nella quali tramite un pulsante richiama la maschera del calendario, la maschera calendario avrà il compito di inserire la data selezionata in una casella di testo della maschera che ha aperto il calendario.

Si crea un nuova maschera, selezionare la voce di menu crea e poi nella barra degli strumenti, la voce struttura maschera. Questa maschera avrà il compito di visualizzare il calendario.

Come mostrato in figura 2







Figura 2


Tramite il pulsante inserisci controllo ActiveX, nella finestra che viene aperta (figura 2) selezioniamo la voce “Controllo Calendario 12.0” selezioniamo tale voce e confermiamo tramite il pulsante ok.

Fatto ciò inseriamo due pulsanti, uno per la conferma della data selezionata il quale avrà come testo la dicitura “Conferma”, e l’altro per la chiusura della finestra con la dicitura “Chiudi”, senza che venga riportata la data selezionata. La finestra dev’essere simile come riportata in figura 2.

Terminata la fase per l’impostazione della finestra, scriviamo il codice VBA, che avrà il compito di riportare la data selezionata.

Selezioniamo il pulsante quello per la chiusura della finestra, e nell’evento click di tale pulsante, inseriamo il seguente codice che permette la chiusura della maschera.

Codice Vba per il pulsante della chiusura:


Private Sub Chiudi_Click()


On Error GoTo Errore


DoCmd.Close


Exit Sub


Errore:


MsgBox "Si è verificato il seguente errore: " & Err.Description, vbCritical, "Calendario"


End Sub



Sempre nell’editor VBA, inseriamo due variabili pubbliche, che avranno il compito di riportare il nome della maschera e del controllo che andrà aggiornato.

Il codice va messo in alto, come mostrato qui di seguito.


Option Compare Database


Public NomeControllo As String


Public NomeMaschera As String





Per l’evento click del pulsante conferma, andrà inserito il codice che avrà il compito di riportare nel controllo della maschera che ha avviato il calendario la data selezionata.

Di seguito si riporta il codice per l’evento click del pulsante di conferma.


Private Sub Conferma_Click()


On Error GoTo Errore


Dim Data As String


'Rilevo la data


Data = Calendario.Value


Dim intConta As Integer


'ciclo per tutte le machere e poi per tutti i controlli


Dim IntContaMaschere As Integer


For IntContaMaschere = 0 To CurrentProject.AllForms.Count - 1


If Application.Forms(IntContaMaschere).Name = NomeMaschera Then


Dim intContaControlli As Integer


For intContaControlli = 0 To Application.Forms(IntContaMaschere).Controls.Count - 1


If Application.Forms(IntContaMaschere).Controls.Item(intContaControlli).Name = NomeControllo Then


'Trova la mashcera e controllo, imposto la data


Forms(Application.Forms(IntContaMaschere).Name).Controls(Application.Forms(IntContaMaschere).Controls.Item(intContaControlli).Name).SetFocus


Forms(Application.Forms(IntContaMaschere).Name).Controls(Application.Forms(IntContaMaschere).Controls.Item(intContaControlli).Name).Text = Data


'chiudo la finestra


DoCmd.Close


Exit Sub


End If


Next intContaControlli



End If


Next IntContaMaschere


'chiudo la finestra


DoCmd.Close


Exit Sub



Errore:


MsgBox "Si è verificato il seguente errore: " & Err.Description, vbCritical, "Calendario"


End Sub





Creazione della maschera di esempio.

Terminata la creazione della maschera per la visualizzazione del calendario, non ci resta che creare una maschera di esempio.






Figura 3

La maschera dovrà avere tre caselle di testo, tre etichette ed un pulsante il quale avrà il compito di richiamare la maschera per la selezione della data. L’aspetto della maschera dev’essere simile a quella illustrata in figura 3.

Di seguito si riporta il codice per l’evento click del pulsante.


Private Sub calendario_Click()


On Error GoTo Errore



'apro la maschera calendario


DoCmd.OpenForm "Calendario"


'imposto le variabili pubbliche con il nome del controllo e della maschera


Form_Calendario.NomeControllo = Me.txtdata.Name


Form_Calendario.NomeMaschera = Me.Name


Exit Sub



Errore:


MsgBox "Si è verificato il seguente errore: " & Err.Description, vbCritical, "Calendario"



End Sub






Conclusioni:

In questo articolo, abbiamo visto come migliorare l’interfaccia grafica delle maschera con un calendario, il tutto tramite il codice Visual Basic Application. Tramite la parola Download è possibile scaricare il file Microsoft Access 2007 di esempio, completo del codice VBA.

Download esempio




venerdì 25 aprile 2008

Sharepoint 2007 inviare un email tramite .Net (VB.Net e C#)

In questo frammento di codice, viene illustrato come inviare un email in Sharepoint 2007, tramite la tecnologia .Net. Si ricorda di configurare il servizio smtp di sharepoint

Namespace

VB.Net

Imports microsoft.SharePoint.Utilities

C#
using Microsoft.SharePoint.Utilities;

Codice

VB.Net

SPUtility.SendEmail(SPContext.Current.Web, False, False, "destinatario@dominio.it", "oggetto", "testo nella email")

C#
SPUtility.SendEmail(SPContext.Current.Web, false, false,"destinatario@dominio.it", "oggetto", "testo nel corpo");

domenica 6 aprile 2008

Differenza tra due date (VB.Net e C#)

Questo frammento di codice, illustra un modo di come ottenere la differenza tra due date.

Tramite il metodo subtract otteniamo un oggetto timespan, di cui possiamo rilevare la differenza in giorni, ore, minuti e secondi.

Di seguito si riporta l'esempio di codice nel linguaggio VB.Net e C#

VB.Net


Dim data As New DateTime(2008, 3, 20, 10, 20, 5)


Dim data2 As New DateTime(2008, 5, 20, 11, 21, 7)


'ottengo la differenza tra due date


Dim diff As TimeSpan = data2.Subtract(data)


MessageBox.Show("Giorni: " & diff.Days)


MessageBox.Show("Ore: " & diff.Hours)


MessageBox.Show("Minuti: " & diff.Minutes)


MessageBox.Show("Secondi: " & diff.Seconds)


'differenza in un unico passaggio


MessageBox.Show(diff.ToString())


C#


DateTime data = new DateTime(2008, 3, 20, 10, 20, 5);


DateTime data2 = new DateTime(2008, 5, 20, 11, 21, 7);


//ottengo la differenza tra due date


TimeSpan diff = data2.Subtract(data);


MessageBox.Show("Giorni: " + diff.Days);


MessageBox.Show("Ore: " + diff.Hours);


MessageBox.Show("Minuti: " + diff.Minutes);


MessageBox.Show("Secondi: " + diff.Seconds);


//differenza in un unico passaggio


MessageBox.Show(diff.ToString());

VBA informazioni sul sistema Hard disk

Il seguente frammento di codice, permette di rilevare alcune informazione relativo al sistema, in particolare Hard Disk.
Aggiungere il riferimento a Microsoft Scripting RunTime.
'caricare il file system objectDim Fso As FileSystemObjectDim ObjDrive As DriveSet Fso = New FileSystemObjectSet ObjDrive = Fso.GetDrive("C:\")MsgBox "Il numero seriale Hard Disk: " & ObjDrive.SerialNumber, vbInformation, "Drive"MsgBox "Spazio libero: " & ObjDrive.FreeSpace, vbInformation, "Drive"MsgBox "Sistema: " & ObjDrive.FileSystem, vbInformation, "Drive"MsgBox "Quantità massima: " & ObjDrive.TotalSize, vbInformation, "Drive"MsgBox "Nome Hard Disk " & ObjDrive.VolumeName, vbInformation, "Drive"