Visualizzazione post con etichetta programmazione. Mostra tutti i post
Visualizzazione post con etichetta programmazione. Mostra tutti i post

mercoledì 29 dicembre 2010

[.Net]in applicazione Windows Mobile, l'evento Form Close non avviene

In un applicazione per Windows Mobile, mi sono torvato a dover eseguire delle operazioni alla chiusura di un form. "Niente di più facile!", mi sono detto, basta intercettare l'evento "form close" o l'evento "form closing" e metterci dentro le operazioni da eseguire. Fatto, avvio l'applicazione e non le esegue! imprecazioni! vado in debug e vedo che l'evento "form closing" che avevo scelto non viene generato.
Provo col "form close" e niente, neanche questo generato.
Controlla e cerca su internet trovo la soluzione: in pratica, di default, la proprietà "MinimizeBox" delle form è impostata a "true", cioè quando si preme la "X" per chiudere la form, non la si chiude effettivamente ma viene minimizzata, quindi gli eventi di chiusura non vengono scatenati.

Basta impostare questa proprietà a "False" e il gioco è fatto! Al posto della "X" appare il bottone "ok" e alla pressione chiude la form scatenando gli eventi del caso.

giovedì 14 ottobre 2010

[C# Asp.net MVC2] Paginazione con MVC Contrib

In una applicazione MVC potrebbe essere necessario paginare i risultati, ovvero, magari il risultato di una query ritorna qualche centinaio di risultati, e nella pagina web vogliamo farne vedere 10 per pagina e navigare tra le pagine.
Non è una cosa complicata, anzi, è molto semplice, sia che venga fatto con "nostro codice", sia utilizzando librerie di terze parti. una di questa librerie è MVC Contrib.
In questo post vi parlerò di MVC Contrib, un progetto per aggiungere funzionalità e  facilità d'uso al Microsoft ASP.NET MVC Framework, utile per gli sviluppatori che cercano di sviluppare e testare gli elementi dell'interfaccia utente, in particolare sull'utilizzo di MVC Contrib Grid, "una griglia" per la paginazione.
Quindi,scarichiamo la libreria, includiamola nel progetto, e nel nostro controller richiamiamo i namespace necessari:

using MvcContrib.Pagination;
using MvcContrib.UI.Grid;
using MvcContrib;
using MvcContrib.UI.Pager;

Immaginiamo di dover visualizzare un elenco di oggetti Customer, richiamati da un repository, definiti come :

public class Customer
{
   public int Id { get; set; }
   public string Surname { get; set; }
   public string Forename {get; set; }
   public DateTime DateOfBirth { get; set; }
}

Nel controller :

public class CustomerController : Controller 
{
   private CustomerRepository _customRep = new CustomerRepository();

    public ActionResult Index(int? page)
   {
     var pagedCustomers = _customRep.FindAll().AsPagination(page ?? 1, 10);
     return View(pagedCustomers);
   }

nella View relativa, invece, importiamo i NameSpace necessari:

<%@ Import Namespace="MvcContrib.UI.Grid" %>
<%@ Import Namespace="MvcContrib.UI.Grid.ActionSyntax" %>
<%@ Import Namespace="MvcContrib.Pagination"%>
<%@ import Namespace="MvcContrib.UI.Pager" %>

 e costruiamo la griglia:

<%= Html.Grid(Model).Columns(column => {
  column.For(cust => cust.Id).Named("Custome ID").DoNotEncode();
  column.For(cust => cust.Surname).Named("Surname").DoNotEncode();
  column.For(cust => cust.DateOfBirth).Named("Date Of Birth").DoNotEncode();
}) %>

<%= Html.Pager((IPagination)Model) %>


Questo è solo un esempietto che mostra come paginare una semplice visualizzazione di risultati, naturalemnte  è possibile inserire all'interno delle "colonne" non solo dati ma altre cose tipo ActionLink, ad esempio:

column.For(cust => Html.ActionLink(cust.Id, "Details", new { id = cust.Id })).Named("Customer ID").DoNotEncode();

invece di mostrare il solo id, crea un link all'actionResult "Details" passando come parametro il customer id;

oppure, ipotizziamo che il customer abbia un ulteriore property chiamata "Photo" dove sia inserito l'indirizzo di un immagine:

column.For(cust => Html.ActionLinkPhoto(cust.Id, cust.Photo, "Details", new { id = cust.Id })).Named("Customer ID").DoNotEncode();

dove ActionLinkPhoto è una classe negli Helper scritta appositamente per avere un action link dove invece di avere una "scritta", si ha un'immagine.

giovedì 7 ottobre 2010

[c# .net asp.net MVC2] Importare contatti gmail

In un'applicazione, potrebbe essere necessario importare i contatti di un account gmail.
La realizzazione è molto semplice e basata sulle Google Data Api, una raccolta di librerie che fornisce un semplice protocollo per leggere e scrivere i dati dal web.

Prima di tutto , scaricare le GoogleDataApi (che trovate qui),  installarle sul pc e aggiungerle come riferimento al proprio progetto ( in questo caso useremo Google.GData.Contacts.dll, Google.GData.Client.dll, Google.GData.Extensions.dll) .
Importare i vari namespace


using Google.GData.Contacts;
using Google.GData.Client;
using Google.GData.Extensions;

Ora si è pronti per l'implementazione del codice per leggere i contatti gmail.

string authSubUrl = AuthSubUtil.getRequestUrl("http://www.example.com/Hello.asp", "http://www.google.com/m8/feeds/", False, True);

GAuthSubRequestFactory authFactory = new GAuthSubRequestFactory("cp", "exampleCo-exampleApp-1");
authFactory.Token = (String)Session["token"];
ContactsService service = new ContactsService("exampleCo-exampleApp-1");
  service.setUserCredentials(email, password);
ContactsQuery query = new ContactsQuery(ContactsQuery.CreateContactsUri("default"));
ContactsFeed feed = service.Query(query);




a questo punto all'interno del feed.Entries ci sono i contatti.
per estrapolarli basta un semplice ciclo di lettura per scorrere tutti i contatti, ad esempio:

foreach (ContactEntry item in feed.Entries)

{

      // in item.Name abbiamo i vari "nomi" del contatto, per esempio :
      //item.Name.FullName
      //item.Name.FamilyName
      //item.Name.GivenName
      //item.Name.NamePrefix
      //item.Name.NameSuffix
      //item.Name.AdditonalName
     // mentre all'interno di item.Emails abbiamo tutti gli indirizzi associati al contatto con le varie proprietà, 
//quindi anche qui basta un semplice ciclo di lettura per estrapolare tutti i dati:

             foreach (EMail email in entry.Emails)

                {
                    // in email.Address si ottiene l'indirizzo email
                    //in email.Home, email.Work, email.Other si trova un valore bool che
                    //indica se questo indirizzo è 
                    //classificato come Home, Work o Other
                 }
}

naturalmente questo è solo un esempio di utilizzo di queste api per la semplice estrapolazione dei contatti da un account Gmail, le funzioni messe a disposizione sono molteplici e si può fare molto altro.
Related Posts Plugin for WordPress, Blogger...