<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Dorian LAMANDE &#38; Technologies Microsoft</title>
	<atom:link href="http://dorianlamande.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://dorianlamande.wordpress.com</link>
	<description></description>
	<lastBuildDate>Wed, 19 Jan 2011 16:00:48 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='dorianlamande.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Dorian LAMANDE &#38; Technologies Microsoft</title>
		<link>http://dorianlamande.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://dorianlamande.wordpress.com/osd.xml" title="Dorian LAMANDE &#38; Technologies Microsoft" />
	<atom:link rel='hub' href='http://dorianlamande.wordpress.com/?pushpress=hub'/>
		<item>
		<title>WP7 : Comment internationaliser vos applications ?</title>
		<link>http://dorianlamande.wordpress.com/2011/01/18/wp7-comment-internationaliser-vos-applications/</link>
		<comments>http://dorianlamande.wordpress.com/2011/01/18/wp7-comment-internationaliser-vos-applications/#comments</comments>
		<pubDate>Tue, 18 Jan 2011 10:45:55 +0000</pubDate>
		<dc:creator>Dorian LAMANDE</dc:creator>
		
		<guid isPermaLink="false">https://dorianlamande.wordpress.com/2011/01/18/wp7-comment-internationaliser-vos-applications/</guid>
		<description><![CDATA[Pour toucher un peu plus de monde sur le MarketPlace, il va falloir passer par une phase d’internationalisation de votre application. Pour commencer on créer une simple application “Hello World”. Ensuite on va ajouter un fichier de ressources : “AppResources”. Ajoute une nouvelle Clef : “HelloWorld” avec la valeur “Hello World !” Copier / Coller [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=286&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Pour toucher un peu plus de monde sur le MarketPlace, il va falloir passer par une phase d’internationalisation de votre application.</p>
<p>Pour commencer on créer une simple application “Hello World”.</p>
<p><a href="http://dorianlamande.files.wordpress.com/2011/01/image.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;margin:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2011/01/image_thumb.png?w=244&#038;h=176" width="244" height="176" /></a></p>
<p>Ensuite on va ajouter un fichier de ressources : “AppResources”. </p>
<p><a href="http://dorianlamande.files.wordpress.com/2011/01/image1.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;margin:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2011/01/image_thumb1.png?w=244&#038;h=170" width="244" height="170" /></a></p>
<p>Ajoute une nouvelle Clef : “HelloWorld” avec la valeur “Hello World !”</p>
<p><a href="http://dorianlamande.files.wordpress.com/2011/01/image2.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;margin:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2011/01/image_thumb2.png?w=244&#038;h=42" width="244" height="42" /></a></p>
<p>Copier / Coller le ficher “AppResources.rsx” et renommer le en AppResources.fr.rsx. Ensuite remplace “Hello World !” par “Salut le Monde !”</p>
<p>Maintenant dans le code behind, nous allons dire que notre “PageTitle” contiendra notre “Hello World”.</p>
<pre class="code"><span style="color:blue;">public </span>MainPage()
        {
            InitializeComponent();
            <span style="color:blue;">this</span>.PageTitle.Text = <span style="color:#2b91af;">AppResources</span>.HelloWorld;
        }</pre>
<p>Ensuite il faut aller éditer le fichier “.csproj” et ajouter “fr” dans le SupportedCulture :</p>
<p>&lt;SupportedCultures&gt;fr&lt;/SupportedCultures&gt;</p>
<p>Si vous souhaitez ajouter l’espagnole ce sera comme ceci :</p>
<p>&lt;SupportedCultures&gt;fr;es&lt;/SupportedCultures&gt;</p>
<p>Recharger votre solution. Déployer la sur votre émulateur. Nous avons la version anglaise.</p>
<p><a href="http://dorianlamande.files.wordpress.com/2011/01/image3.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;margin:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2011/01/image_thumb3.png?w=136&#038;h=244" width="136" height="244" /></a></p>
<p>Maintenant nous allons changer la langue de l’émulateur :</p>
<p><a href="http://dorianlamande.files.wordpress.com/2011/01/image4.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;margin:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2011/01/image_thumb4.png?w=136&#038;h=244" width="136" height="244" /></a></p>
<p>Validons et ré-exécutons notre application :</p>
<p><a href="http://dorianlamande.files.wordpress.com/2011/01/image5.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;margin:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2011/01/image_thumb5.png?w=136&#038;h=244" width="136" height="244" /></a></p>
<p>(J’ai rajouté un TextWrapping=”Wrap” pour l’affichage)</p>
<p>En complément de ce billet je vous invite à consulter le post de Pierre Cauchois sur “Comment localiser le titre d’une application ?”</p>
<p><a title="http://blogs.msdn.com/b/pierreca/archive/2010/12/06/windows-phone-7-localisez-le-titre-ou-le-nom-de-votre-application.aspx" href="http://blogs.msdn.com/b/pierreca/archive/2010/12/06/windows-phone-7-localisez-le-titre-ou-le-nom-de-votre-application.aspx">http://blogs.msdn.com/b/pierreca/archive/2010/12/06/windows-phone-7-localisez-le-titre-ou-le-nom-de-votre-application.aspx</a></p>
<p>A bientôt.</p>
<p>Dorian LAMANDE</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dorianlamande.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dorianlamande.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dorianlamande.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dorianlamande.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dorianlamande.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dorianlamande.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dorianlamande.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dorianlamande.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dorianlamande.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dorianlamande.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dorianlamande.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dorianlamande.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dorianlamande.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dorianlamande.wordpress.com/286/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=286&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dorianlamande.wordpress.com/2011/01/18/wp7-comment-internationaliser-vos-applications/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c45f6dc0ddf06234d1a231875ea50c0f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dorianlamande</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2011/01/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2011/01/image_thumb1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2011/01/image_thumb2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2011/01/image_thumb3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2011/01/image_thumb4.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2011/01/image_thumb5.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Concours Windows Phone  &#8211; ProgTV</title>
		<link>http://dorianlamande.wordpress.com/2010/08/25/concours-windows-phone-progtv/</link>
		<comments>http://dorianlamande.wordpress.com/2010/08/25/concours-windows-phone-progtv/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 08:17:44 +0000</pubDate>
		<dc:creator>Dorian LAMANDE</dc:creator>
				<category><![CDATA[Divers]]></category>

		<guid isPermaLink="false">http://dorianlamande.wordpress.com/?p=270</guid>
		<description><![CDATA[Avec Yann Garit, nous participons au concours de développement sur Windows Phone 7 : Rendez vous ici : http://www.facebook.com/home.php#!/video/video.php?v=445160459896&#38;oid=129459787073480 et cliquez sur &#171;&#160;J’aime&#160;&#187; pour nous soutenir ! C’est à vous de jouer Dorian LAMANDE<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=270&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Avec <a title="Yann Garit" href="http://www.facebook.com/ygarit" target="_self">Yann Garit</a>, nous participons au concours de développement sur Windows Phone 7 : Rendez vous ici : http://www.facebook.com/home.php#!/video/video.php?v=445160459896&amp;oid=129459787073480 et cliquez sur &laquo;&nbsp;J’aime&nbsp;&raquo; pour nous soutenir !</p>
<p>C’est à vous de jouer <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Dorian LAMANDE</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dorianlamande.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dorianlamande.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dorianlamande.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dorianlamande.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dorianlamande.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dorianlamande.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dorianlamande.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dorianlamande.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dorianlamande.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dorianlamande.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dorianlamande.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dorianlamande.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dorianlamande.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dorianlamande.wordpress.com/270/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=270&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dorianlamande.wordpress.com/2010/08/25/concours-windows-phone-progtv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c45f6dc0ddf06234d1a231875ea50c0f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dorianlamande</media:title>
		</media:content>
	</item>
		<item>
		<title>WPF : Obtenir la &#8220;Duration&#8221; d&#8217;une vid&#233;o</title>
		<link>http://dorianlamande.wordpress.com/2010/08/09/wpf-obtenir-la-duration-dune-vido/</link>
		<comments>http://dorianlamande.wordpress.com/2010/08/09/wpf-obtenir-la-duration-dune-vido/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 15:29:00 +0000</pubDate>
		<dc:creator>Dorian LAMANDE</dc:creator>
				<category><![CDATA[WPF]]></category>
		<category><![CDATA[WPF;Duration;mediaElement;RIA;Media;]]></category>

		<guid isPermaLink="false">https://dorianlamande.wordpress.com/2010/08/09/wpf-obtenir-la-duration-dune-vido/</guid>
		<description><![CDATA[Lors d’un projet sur WPF, j’avais besoin d’obtenir la durée d’une vidéo. Je me suis dit, c’est simple, je vais aller regarder le NaturalDuration… mais hélàs c’était trop simple : &#60;Grid&#62; &#60;StackPanel Orientation="Horizontal"&#62; &#60;Label&#62;Duration :&#60;/Label&#62; &#60;TextBlock x:Name="tbDuration" Margin="0,5,0,0"&#62;&#60;/TextBlock&#62; &#60;/StackPanel&#62; &#60;MediaElement x:Name="media" Visibility="Collapsed" &#62;&#60;/MediaElement&#62; &#60;/Grid&#62; OpenFileDialog openFileDialog = new OpenFileDialog();openFileDialog.Filter = &#171;&#160;Video Files (*.avi;*.mpg;.*mpeg;*.wmv)&#124;*.avi;*.mpg;.*mpeg;*.wmv&#160;&#187;;openFileDialog.ShowDialog();if (openFileDialog.FileName != [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=267&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Lors d’un projet sur WPF, j’avais besoin d’obtenir la durée d’une vidéo.</p>
<p>Je me suis dit, c’est simple, je vais aller regarder le NaturalDuration… mais hélàs c’était trop simple :</p>
<p><span style="color:blue;">
<pre class="code">    <span style="color:blue;">&lt;</span><span style="color:#a31515;">Grid</span><span style="color:blue;">&gt;
        &lt;</span><span style="color:#a31515;">StackPanel </span><span style="color:red;">Orientation</span><span style="color:blue;">="Horizontal"&gt;
        &lt;</span><span style="color:#a31515;">Label</span><span style="color:blue;">&gt;</span><span style="color:#a31515;">Duration :</span><span style="color:blue;">&lt;/</span><span style="color:#a31515;">Label</span><span style="color:blue;">&gt;
        &lt;</span><span style="color:#a31515;">TextBlock </span><span style="color:red;">x</span><span style="color:blue;">:</span><span style="color:red;">Name</span><span style="color:blue;">="tbDuration" </span><span style="color:red;">Margin</span><span style="color:blue;">="0,5,0,0"&gt;&lt;/</span><span style="color:#a31515;">TextBlock</span><span style="color:blue;">&gt;
        &lt;/</span><span style="color:#a31515;">StackPanel</span><span style="color:blue;">&gt;
        &lt;</span><span style="color:#a31515;">MediaElement </span><span style="color:red;">x</span><span style="color:blue;">:</span><span style="color:red;">Name</span><span style="color:blue;">="media" </span><span style="color:red;">Visibility</span><span style="color:blue;">="Collapsed" &gt;&lt;/</span><span style="color:#a31515;">MediaElement</span><span style="color:blue;">&gt;
    &lt;/</span><span style="color:#a31515;">Grid</span><span style="color:blue;">&gt;
</span></pre>
<p></span></p>
<p><span style="color:#2b91af;">OpenFileDialog </span>openFileDialog = <span style="color:blue;">new </span><span style="color:#2b91af;">OpenFileDialog</span>();<br />openFileDialog.Filter = <span style="color:#a31515;">&laquo;&nbsp;Video Files (*.avi;*.mpg;.*mpeg;*.wmv)|*.avi;*.mpg;.*mpeg;*.wmv&nbsp;&raquo;</span>;<br />openFileDialog.ShowDialog();<br /><span style="color:blue;">if </span>(openFileDialog.FileName != <span style="color:#2b91af;">String</span>.Empty)<br />{<br />&nbsp;&nbsp;&nbsp; media.Source = <span style="color:blue;">new </span><span style="color:#2b91af;">Uri</span>(openFileDialog.FileName);<br />&nbsp;&nbsp;&nbsp; <span style="color:blue;">this</span>.tbDuration.Text = media.NaturalDuration.TimeSpan.TotalMinutes.ToString();<br />}<br /><a href="http://dorianlamande.files.wordpress.com/2010/08/image.png"><img style="display:inline;border-width:0;margin:0;" class="wlDisabledImage" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2010/08/image_thumb.png?w=244&#038;h=146" width="244" height="146"></a></p>
<p>Le seul moyen c’est d’entrer dans la méthode “MediaOpened” du mediaElement et de faire un play/pause manuellement.</p>
<p><span id="more-267"></span>
<pre class="code"><span style="color:blue;">this</span>.media.MediaOpened += <span style="color:blue;">new </span><span style="color:#2b91af;">RoutedEventHandler</span>(media_MediaOpened);
</pre>
<pre class="code"><span style="color:#2b91af;">OpenFileDialog </span>openFileDialog = <span style="color:blue;">new </span><span style="color:#2b91af;">OpenFileDialog</span>();
            openFileDialog.Filter = <span style="color:#a31515;">"Video Files (*.avi;*.mpg;.*mpeg;*.wmv)|*.avi;*.mpg;.*mpeg;*.wmv"</span>;
            openFileDialog.ShowDialog();
            <span style="color:blue;">if </span>(openFileDialog.FileName != <span style="color:#2b91af;">String</span>.Empty)
            {

                media.Source = <span style="color:blue;">new </span><span style="color:#2b91af;">Uri</span>(openFileDialog.FileName);
                media.LoadedBehavior = <span style="color:#2b91af;">MediaState</span>.Manual;
                media.Play();
                media.Pause();

            }</pre>
<pre class="code"><span style="color:blue;">private void </span>media_MediaOpened(<span style="color:blue;">object </span>sender, <span style="color:#2b91af;">RoutedEventArgs </span>e)
{
    <span style="color:blue;">this</span>.tbDuration.Text = media.NaturalDuration.TimeSpan.TotalSeconds.ToString();
}
</pre>
<p>&nbsp;</p>
<pre class="code">
<pre class="code"><a href="http://dorianlamande.files.wordpress.com/2010/08/image1.png"><img style="display:inline;border-width:0;margin:0;" class="wlDisabledImage" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2010/08/image_thumb1.png?w=232&#038;h=79" width="232" height="79"></a></pre>
</pre>
<pre class="code"><font face="Verdana">Et voilà nous avons notre durée !</font></pre>
<pre class="code"><font face="Verdana">Dorian LAMANDE, stagiaire ingénieur chez <a href="http://www.wygwam.com" target="_blank">Wygwam</a></font></pre>
<pre class="code"></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dorianlamande.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dorianlamande.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dorianlamande.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dorianlamande.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dorianlamande.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dorianlamande.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dorianlamande.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dorianlamande.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dorianlamande.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dorianlamande.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dorianlamande.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dorianlamande.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dorianlamande.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dorianlamande.wordpress.com/267/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=267&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dorianlamande.wordpress.com/2010/08/09/wpf-obtenir-la-duration-dune-vido/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c45f6dc0ddf06234d1a231875ea50c0f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dorianlamande</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/08/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/08/image_thumb1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>WPF : Binding Enumeration Description</title>
		<link>http://dorianlamande.wordpress.com/2010/06/07/wpf-binding-enumeration-description/</link>
		<comments>http://dorianlamande.wordpress.com/2010/06/07/wpf-binding-enumeration-description/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 12:35:00 +0000</pubDate>
		<dc:creator>Dorian LAMANDE</dc:creator>
				<category><![CDATA[WPF]]></category>
		<category><![CDATA[Binding]]></category>
		<category><![CDATA[Description]]></category>
		<category><![CDATA[Enum]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">https://dorianlamande.wordpress.com/2010/06/07/wpf-binding-enumeration-description/</guid>
		<description><![CDATA[Voici un petit billet pour vous montrer comment “binder” des descriptions qui viennent des enumerations sur des combobox. 1. Création de notre projet : Ouvrons notre visual studio préféré (le 2010 !). Créons une nouvelle application WPF, que nous appelons “WPFBindingEnumeration.UI”, ajoutons tout de suite un second projet, de type “class library” “WPFBindingEnumeration.Entity” et dernier [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=259&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Voici un petit billet pour vous montrer comment “binder” des descriptions qui viennent des enumerations sur des combobox.</p>
<p>1. Création de notre projet :</p>
<p>Ouvrons notre visual studio préféré (le 2010 !). Créons une nouvelle application WPF, que nous appelons “WPFBindingEnumeration.UI”, ajoutons tout de suite un second projet, de type “class library” “WPFBindingEnumeration.Entity” et dernier projet du même type : “WPFBindingEnumeration.Utils”</p>
<p>2. Création de l’énumération :</p>
<p>Ici on va se focaliser sur le cas suivant : notre client voudrait en affichage les situations familiales suivantes : Célibataire, Marié(e), Divorcé(e), Séparé(e), Pacsé(e), Veuf(ve), Autre.</p>
<p>Nous allons utiliser des descriptions afin de pouvoir permettre l’affichage de la liste dans une combobox.</p>
<pre class="code"><span style="color:blue;">public enum </span><span style="color:#2b91af;">FamilialSituationEnum
</span>{
    [<span style="color:#2b91af;">Description</span>(<span style="color:#a31515;">&quot;Célibataire&quot;</span>)]
    Celibataire,
    [<span style="color:#2b91af;">Description</span>(<span style="color:#a31515;">&quot;Marié(e)&quot;</span>)]
    Marie,
    [<span style="color:#2b91af;">Description</span>(<span style="color:#a31515;">&quot;Divorcé(e)&quot;</span>)]
    Divorce,
    [<span style="color:#2b91af;">Description</span>(<span style="color:#a31515;">&quot;Séparé(e)&quot;</span>)]
    Separe,
    [<span style="color:#2b91af;">Description</span>(<span style="color:#a31515;">&quot;Pacsé(e)&quot;</span>)]
    Pacse,
    [<span style="color:#2b91af;">Description</span>(<span style="color:#a31515;">&quot;Veuf(ve)&quot;</span>)]
    Veuf,
    [<span style="color:#2b91af;">Description</span>(<span style="color:#a31515;">&quot;Autre&quot;</span>)]
    Autre
}</pre>
<p><span id="more-259"></span></p>
<p><span style="color:#e0e0e0;"></span></p>
<p><span style="color:#e0e0e0;"><font color="#2a2a2a">3. Création de l’entité</font></span></p>
<pre class="code"><span style="color:blue;">public </span><span style="color:#2b91af;">FamilialSituationEnum </span>SituationFamiliale { <span style="color:blue;">get</span>; <span style="color:blue;">set</span>; }

<span style="color:blue;">public </span>Entity()
{
    SituationFamiliale = <span style="color:#2b91af;">FamilialSituationEnum</span>.Celibataire;
}</pre>
<p>Par défaut, nous mettons la situation familial à “Célibataire”.</p>
<p>4. Création d’une méthode d’extension afin d’obtenir la description</p>
<p>Nous allons plasser cette méthode dans notre projet Utils.</p>
<pre class="code"><span style="color:blue;">public static string </span>GetDescription(<span style="color:blue;">this </span><span style="color:#2b91af;">Enum </span>enumObj)
{
    <span style="color:#2b91af;">FieldInfo </span>fieldInfo =
            enumObj.GetType().GetField(enumObj.ToString());

    <span style="color:blue;">object</span>[] attribArray = fieldInfo.GetCustomAttributes(<span style="color:blue;">false</span>);

    <span style="color:blue;">if </span>(attribArray.Length == 0)
    {
        <span style="color:blue;">return </span>enumObj.ToString();
    }
    <span style="color:blue;">else
    </span>{
        <span style="color:#2b91af;">DescriptionAttribute </span>attrib =
                attribArray[0] <span style="color:blue;">as </span><span style="color:#2b91af;">DescriptionAttribute</span>;
        <span style="color:blue;">return </span>attrib.Description;
    }
} </pre>
<p>5. Binding dans l’UI</p>
<p><span style="color:#e0e0e0;"><font color="#2a2a2a">L’énumération n’implémente pas IEnumerable … donc impossible de mettre notre “ItemsSource” sur notre énumération !</font></span></p>
<p><span style="color:#e0e0e0;"></span><span style="color:#e0e0e0;"><font color="#2a2a2a">Nous allons donc créer un helper qui va nous retourn une IEnumerable&lt;string&gt; :</font></span></p>
<pre class="code"><span style="color:blue;">public static </span><span style="color:#2b91af;">IEnumerable</span>&lt;<span style="color:blue;">string</span>&gt; FamilialSituationSelections
{
    <span style="color:blue;">get
    </span>{
        <span style="color:blue;">var </span>descriptions = <span style="color:blue;">new</span>[]
                    {
                       <span style="color:#2b91af;">FamilialSituationEnum</span>.Autre.GetDescription(),
                       <span style="color:#2b91af;">FamilialSituationEnum</span>.Celibataire.GetDescription(),
                       <span style="color:#2b91af;">FamilialSituationEnum</span>.Marie.GetDescription(),
                       <span style="color:#2b91af;">FamilialSituationEnum</span>.Pacse.GetDescription(),
                       <span style="color:#2b91af;">FamilialSituationEnum</span>.Separe.GetDescription(),
                       <span style="color:#2b91af;">FamilialSituationEnum</span>.Veuf.GetDescription()
                    };
        <span style="color:blue;">return </span>descriptions;
    }
}</pre>
<p>Attention la méthode GetDescription() s’obtient en ajoutant l’espace de nom WPFBindingEnumeration.Utils !</p>
<p>Côté de xaml cela donne :</p>
<pre class="code">    <span style="color:blue;">&lt;</span><span style="color:#a31515;">Grid</span><span style="color:blue;">&gt;
        &lt;</span><span style="color:#a31515;">ComboBox </span><span style="color:red;">x</span><span style="color:blue;">:</span><span style="color:red;">Name</span><span style="color:blue;">=&quot;cbSituationFamiliale&quot; </span><span style="color:red;">Width</span><span style="color:blue;">=&quot;80&quot; </span><span style="color:red;">Height</span><span style="color:blue;">=&quot;23&quot; </span><span style="color:red;">SelectedItem</span><span style="color:blue;">=&quot;{</span><span style="color:#a31515;">Binding </span><span style="color:red;">SituationFamiliale</span><span style="color:blue;">}&quot;/&gt;
    &lt;/</span><span style="color:#a31515;">Grid</span><span style="color:blue;">&gt;
</span></pre>
<p>&#160;</p>
<p>Exécutons l’application :</p>
<p><a href="http://dorianlamande.files.wordpress.com/2010/06/image.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2010/06/image_thumb.png?w=244&#038;h=199" width="244" height="199" /></a> <a href="http://dorianlamande.files.wordpress.com/2010/06/image1.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2010/06/image_thumb1.png?w=223&#038;h=126" width="223" height="126" /></a></p>
<p>On récupère bien les descriptions, mais lorsque l’on selectionne, on a un liserait rouge qui apparait.</p>
<p>Cela veut dire qu’il y un problème avec notre binding ! En effet nous avons spécifié dans le “SelectedItem” un binding sur SituationFamiale. On s’attend donc à avoir un énumération. Or le type ici est IEnumerable&lt;string&gt;, il faut donc changer notre binding et créer un converter.</p>
<p>Le converter :</p>
<pre class="code"><span style="color:blue;">public class </span><span style="color:#2b91af;">EnumDescriptionConverter </span>: <span style="color:#2b91af;">IValueConverter
</span>{
    <span style="color:green;">//From Binding Source
    </span><span style="color:blue;">public object </span>Convert(<span style="color:blue;">object </span>value, <span style="color:#2b91af;">Type </span>targetType, <span style="color:blue;">object </span>parameter, <span style="color:#2b91af;">CultureInfo </span>culture)
    {
        <span style="color:blue;">if </span>(!(value <span style="color:blue;">is </span><span style="color:#2b91af;">Enum</span>)) <span style="color:blue;">throw new </span><span style="color:#2b91af;">ArgumentException</span>(<span style="color:#a31515;">&quot;Value is not an Enum&quot;</span>);
        <span style="color:blue;">return </span>(value <span style="color:blue;">as </span><span style="color:#2b91af;">Enum</span>).GetDescription();
    }

    <span style="color:green;">//From Binding Target
    </span><span style="color:blue;">public object </span>ConvertBack(<span style="color:blue;">object </span>value, <span style="color:#2b91af;">Type </span>targetType, <span style="color:blue;">object </span>parameter, <span style="color:#2b91af;">CultureInfo </span>culture)
    {
        <span style="color:blue;">if </span>(!(value <span style="color:blue;">is string</span>)) <span style="color:blue;">throw new </span><span style="color:#2b91af;">ArgumentException</span>(<span style="color:#a31515;">&quot;Value is not a string&quot;</span>);
        <span style="color:blue;">foreach </span>(<span style="color:blue;">var </span>item <span style="color:blue;">in </span><span style="color:#2b91af;">Enum</span>.GetValues(targetType))
        {
            <span style="color:blue;">var </span>asString = (item <span style="color:blue;">as </span><span style="color:#2b91af;">Enum</span>).GetDescription();
            <span style="color:blue;">if </span>(asString == (<span style="color:blue;">string</span>)value)
            {
                <span style="color:blue;">return </span>item;
            }
        }
        <span style="color:blue;">throw new </span><span style="color:#2b91af;">ArgumentException</span>(<span style="color:#a31515;">&quot;Unable to match string to Enum description&quot;</span>);
    }

}</pre>
<p>Le nouveau binding :</p>
<p>Ajoutons la référence de notre converter :</p>
<pre class="code"><span style="color:red;">xmlns</span><span style="color:blue;">:</span><span style="color:red;">convertor</span><span style="color:blue;">=&quot;clr-namespace:WPFBindingEnumeration.UI.Converters&quot;
</span></pre>
<pre class="code"><span style="color:blue;">&lt;</span><span style="color:#a31515;">Window.Resources</span><span style="color:blue;">&gt;
        &lt;</span><span style="color:#a31515;">convertor</span><span style="color:blue;">:</span><span style="color:#a31515;">EnumDescriptionConverter </span><span style="color:red;">x</span><span style="color:blue;">:</span><span style="color:red;">Key</span><span style="color:blue;">=&quot;enumDescriptionConverter&quot;&gt;&lt;/</span><span style="color:#a31515;">convertor</span><span style="color:blue;">:</span><span style="color:#a31515;">EnumDescriptionConverter</span><span style="color:blue;">&gt;
    &lt;/</span><span style="color:#a31515;">Window.Resources</span><span style="color:blue;">&gt;
    &lt;</span><span style="color:#a31515;">Grid</span><span style="color:blue;">&gt;
        &lt;</span><span style="color:#a31515;">ComboBox </span><span style="color:red;">x</span><span style="color:blue;">:</span><span style="color:red;">Name</span><span style="color:blue;">=&quot;cbSituationFamiliale&quot; </span><span style="color:red;">Width</span><span style="color:blue;">=&quot;80&quot; </span><span style="color:red;">Height</span><span style="color:blue;">=&quot;23&quot; </span><span style="color:red;">SelectedItem</span><span style="color:blue;">=&quot;{</span><span style="color:#a31515;">Binding </span><span style="color:red;">SituationFamiliale</span><span style="color:blue;">, </span><span style="color:red;">Converter</span><span style="color:blue;">={</span><span style="color:#a31515;">StaticResource </span><span style="color:red;">enumDescriptionConverter</span><span style="color:blue;">}}&quot;/&gt;
    &lt;/</span><span style="color:#a31515;">Grid</span><span style="color:blue;">&gt;
</span></pre>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>Exécutons à nouveau l’application :</p>
<p><a href="http://dorianlamande.files.wordpress.com/2010/06/image2.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2010/06/image_thumb2.png?w=222&#038;h=130" width="222" height="130" /></a> </p>
<p>A l’ouverture nous avons directement la combobox sur l’item “Célibataire”, ce qui est logique car par défaut dans notre entité on a mis : </p>
<pre class="code">SituationFamiliale = <span style="color:#2b91af;">FamilialSituationEnum</span>.Celibataire;</pre>
<p>&#160;</p>
<p>Vérifions que lors d’un changement notre binding reste fonctionnel :</p>
<pre class="code"><span style="color:blue;">void </span>cbSituationFamiliale_SelectionChanged(<span style="color:blue;">object </span>sender, System.Windows.Controls.<span style="color:#2b91af;">SelectionChangedEventArgs </span>e)
{
    <span style="color:#2b91af;">MessageBox</span>.Show(((<span style="color:#2b91af;">Entity</span>)<span style="color:blue;">this</span>.DataContext).SituationFamiliale.ToString());
}</pre>
<p>&#160;</p>
<p><a href="http://dorianlamande.files.wordpress.com/2010/06/image3.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2010/06/image_thumb3.png?w=158&#038;h=158" width="158" height="158" /></a> <a href="http://dorianlamande.files.wordpress.com/2010/06/image4.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2010/06/image_thumb4.png?w=232&#038;h=105" width="232" height="105" /></a> </p>
<p>Tout fonctionne !</p>
<p>Dorian LAMANDE, stagiaire ingénieur chez <a href="http://www.wygwam.com" target="_blank">Wygwam</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dorianlamande.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dorianlamande.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dorianlamande.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dorianlamande.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dorianlamande.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dorianlamande.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dorianlamande.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dorianlamande.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dorianlamande.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dorianlamande.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dorianlamande.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dorianlamande.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dorianlamande.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dorianlamande.wordpress.com/259/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=259&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dorianlamande.wordpress.com/2010/06/07/wpf-binding-enumeration-description/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c45f6dc0ddf06234d1a231875ea50c0f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dorianlamande</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/06/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/06/image_thumb1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/06/image_thumb2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/06/image_thumb3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/06/image_thumb4.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Microsoft Windows Azure : Application MVC avec SQL AZURE</title>
		<link>http://dorianlamande.wordpress.com/2010/04/02/microsoft-windows-azure-application-mvc-avec-sql-azure/</link>
		<comments>http://dorianlamande.wordpress.com/2010/04/02/microsoft-windows-azure-application-mvc-avec-sql-azure/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 15:40:00 +0000</pubDate>
		<dc:creator>Dorian LAMANDE</dc:creator>
				<category><![CDATA[Windows Azure]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://dorianlamande.wordpress.com/2010/04/02/microsoft-windows-azure-application-mvc-avec-sql-azure/</guid>
		<description><![CDATA[Créer une application OnPremise est une chose plutôt simple. Et bien sachez que sur la plateforme Azure c’est aussi simple ! Pour notre application MVC, nous avons besoin d’un MembershipProvider, d’un RoleProvider et d’un ProfileProvider. Vous avez déjà pu jouer avec ces Providers via les Azure Tables. Maintenant les providers sont supportés par SQL AZURE. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=241&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Créer une application OnPremise est une chose plutôt simple. Et bien sachez que sur la plateforme Azure c’est aussi simple ! </p>
<p>Pour notre application MVC, nous avons besoin d’un MembershipProvider, d’un RoleProvider et d’un ProfileProvider. Vous avez déjà pu jouer avec ces Providers via les Azure Tables. Maintenant les providers sont supportés par SQL AZURE. Microsoft a mis à dispositions les scripts qui vont bien.</p>
<p><a title="http://code.msdn.microsoft.com/KB2006191/Release/ProjectReleases.aspx?ReleaseId=3539" href="http://code.msdn.microsoft.com/KB2006191/Release/ProjectReleases.aspx?ReleaseId=3539">http://code.msdn.microsoft.com/KB2006191/Release/ProjectReleases.aspx?ReleaseId=3539</a></p>
<p>Décompressez l’archive. Ouvrez SQL Server Mangement Studio et connectez-vous à votre base de données SQL AZURE. (Note: Fermez le prompt à l’ouverture de SSMS, cliquez sur New Query pour vous connectez)</p>
<p><a href="http://dorianlamande.files.wordpress.com/2010/04/image.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2010/04/image_thumb.png?w=244&#038;h=185" width="244" height="185" /></a>&#160;</p>
<p> <span id="more-241"></span>
<p>InstallCommon.sql</p>
<p>InstallMembership.sql</p>
<p>InstallProfile.sql</p>
<p>InstallRoles.sql</p>
<p>InstallWebEventSqlProvider.sql</p>
<p>InstallPersonalization.sql</p>
<p><a href="http://dorianlamande.files.wordpress.com/2010/04/image1.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2010/04/image_thumb1.png?w=244&#038;h=100" width="244" height="100" /></a> </p>
<p>Les SessionsState ne sont pas encore supportées par SQL AZURE.</p>
<p>Maintenant que nous avons nos providers dans SQL Azure on va créer une application MVC pour le Cloud. Voici l’architecture que vous devriez avoir.</p>
<p><a href="http://dorianlamande.files.wordpress.com/2010/04/image2.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2010/04/image_thumb2.png?w=209&#038;h=59" width="209" height="59" /></a> </p>
<p>Dans l’application MVC ajouter une nouvelle classe “WebRole.cs”</p>
<pre class="code"><span style="color:blue;">public class </span><span style="color:#2b91af;">WebRole </span>: <span style="color:#2b91af;">RoleEntryPoint
 </span>{
     <span style="color:blue;">public override bool </span>OnStart()
     {
         <span style="color:#2b91af;">DiagnosticMonitor</span>.Start(<span style="color:#a31515;">&quot;DiagnosticsConnectionString&quot;</span>);
         <span style="color:#2b91af;">CloudStorageAccount</span>.SetConfigurationSettingPublisher((configName, configSetter) =&gt;
         {
             configSetter(<span style="color:#2b91af;">RoleEnvironment</span>.GetConfigurationSettingValue(configName));
         });
         <span style="color:blue;">return base</span>.OnStart();
     }
 }</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Ensuite ajouter ce WebRole au CloudService.</p>
<p><a href="http://dorianlamande.files.wordpress.com/2010/04/image3.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2010/04/image_thumb3.png?w=223&#038;h=131" width="223" height="131" /></a> </p>
<p>Dans Content &gt; HomeController.cs, il faut ajouter l’attribut [<span style="color:#2b91af;">Authorize</span>].</p>
<p>Cela permet de configurer l&#8217;application pour demander un accès authentifié pour chaque action effectuée sur ce contrôleur.</p>
<p>Maintenant on va s’attacher au Web.config</p>
<pre class="code"><span style="color:blue;">&lt;</span><span style="color:#a31515;">connectionStrings</span><span style="color:blue;">&gt;
  &lt;</span><span style="color:#a31515;">add </span><span style="color:red;">name</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">AzureConnectionString</span>&quot; <span style="color:red;">connectionString</span><span style="color:blue;">=”[Votre ConnectionString]”</span><span style="color:blue;">&lt;/</span><span style="color:#a31515;">connectionStrings</span><span style="color:blue;">&gt;</span></pre>
<p><a href="http://11011.net/software/vspaste"></a><a href="http://11011.net/software/vspaste"></a></p>
</p>
</p>
<p>[Votre ConnectionString] : que vous trouverez sur le portail Azure.</p>
<p>On a presque fini, il suffit dans changer le nom de la ConnectionString dans vos différents provider (et modifier l’applicationName). Par exemple :</p>
<pre class="code"><span style="color:blue;">&lt;</span><span style="color:#a31515;">membership</span><span style="color:blue;">&gt;
     &lt;</span><span style="color:#a31515;">providers</span><span style="color:blue;">&gt;
       &lt;</span><span style="color:#a31515;">clear</span><span style="color:blue;">/&gt;
       &lt;</span><span style="color:#a31515;">remove </span><span style="color:red;">name</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">AspNetSqlMembershipProvider</span>&quot; <span style="color:blue;">/&gt;
       &lt;</span><span style="color:#a31515;">add </span><span style="color:red;">name</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">AspNetSqlMembershipProvider</span>&quot;
            <span style="color:red;">type</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</span>&quot;
            <span style="color:red;">connectionStringName</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">AzureConnectionString</span>&quot;
            <span style="color:red;">enablePasswordRetrieval</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">false</span>&quot;
            <span style="color:red;">enablePasswordReset</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">true</span>&quot;
            <span style="color:red;">requiresQuestionAndAnswer</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">false</span>&quot;
            <span style="color:red;">requiresUniqueEmail</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">false</span>&quot;
            <span style="color:red;">passwordFormat</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">Hashed</span>&quot;
            <span style="color:red;">maxInvalidPasswordAttempts</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">5</span>&quot;
            <span style="color:red;">minRequiredPasswordLength</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">6</span>&quot;
            <span style="color:red;">minRequiredNonalphanumericCharacters</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">0</span>&quot;
            <span style="color:red;">passwordAttemptWindow</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">10</span>&quot;
            <span style="color:red;">passwordStrengthRegularExpression</span><span style="color:blue;">=</span>&quot;&quot;
            <span style="color:red;">applicationName</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">/MVCApp</span>&quot;
               <span style="color:blue;">/&gt;
     &lt;/</span><span style="color:#a31515;">providers</span><span style="color:blue;">&gt;
   &lt;/</span><span style="color:#a31515;">membership</span><span style="color:blue;">&gt;</span></pre>
<p>On peut compiler, et voici le résultat :</p>
<p><a href="http://dorianlamande.files.wordpress.com/2010/04/image4.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2010/04/image_thumb4.png?w=244&#038;h=146" width="244" height="146" /></a> <a href="http://dorianlamande.files.wordpress.com/2010/04/image5.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2010/04/image_thumb5.png?w=244&#038;h=146" width="244" height="146" /></a> </p>
<p><a href="http://dorianlamande.files.wordpress.com/2010/04/image6.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2010/04/image_thumb6.png?w=244&#038;h=146" width="244" height="146" /></a> </p>
<p>Autre chose fabuleuse, c’est que vous pouvez directement gérer vos utilisateurs grâce à l’ASP.NET Configuration :</p>
<p><a href="http://dorianlamande.files.wordpress.com/2010/04/image7.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2010/04/image_thumb7.png?w=244&#038;h=172" width="244" height="172" /></a> <a href="http://dorianlamande.files.wordpress.com/2010/04/image8.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2010/04/image_thumb8.png?w=244&#038;h=146" width="244" height="146" /></a> </p>
<p><a href="http://dorianlamande.files.wordpress.com/2010/04/image9.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2010/04/image_thumb9.png?w=244&#038;h=146" width="244" height="146" /></a> </p>
<p>&#160;</p>
<p>Dorian LAMANDE</p>
<p>Stagiaire Ingénieur chez <a href="http://www.wygwam.com/" target="_blank">Wygwam</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dorianlamande.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dorianlamande.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dorianlamande.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dorianlamande.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dorianlamande.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dorianlamande.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dorianlamande.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dorianlamande.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dorianlamande.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dorianlamande.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dorianlamande.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dorianlamande.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dorianlamande.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dorianlamande.wordpress.com/241/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=241&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dorianlamande.wordpress.com/2010/04/02/microsoft-windows-azure-application-mvc-avec-sql-azure/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c45f6dc0ddf06234d1a231875ea50c0f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dorianlamande</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/04/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/04/image_thumb1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/04/image_thumb2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/04/image_thumb3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/04/image_thumb4.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/04/image_thumb5.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/04/image_thumb6.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/04/image_thumb7.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/04/image_thumb8.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/04/image_thumb9.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Microsoft Windows Azure : Azure Tables et WPF</title>
		<link>http://dorianlamande.wordpress.com/2010/03/26/microsoft-windows-azure-azure-tables-et-wpf/</link>
		<comments>http://dorianlamande.wordpress.com/2010/03/26/microsoft-windows-azure-azure-tables-et-wpf/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 16:00:00 +0000</pubDate>
		<dc:creator>Dorian LAMANDE</dc:creator>
				<category><![CDATA[Windows Azure]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://dorianlamande.wordpress.com/2010/03/26/microsoft-windows-azure-azure-tables-et-wpf/</guid>
		<description><![CDATA[Vous cherchez comment vous connecter aux Azure Tables autrement qu’avec un projet Cloud ? Je suis seigneur et je vais vous donner la solution. Je vais me baser sur le post précédent, on va réaliser le même type d’application. On aura toujours notre dll “Common” mais on va modifier un peu la classe “ContactRepository.cs”. public [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=212&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Vous cherchez comment vous connecter aux Azure Tables autrement qu’avec un projet Cloud ? Je suis seigneur et je vais vous donner la solution.</p>
<p>Je vais me baser sur le post précédent, on va réaliser le même type d’application.</p>
<p>On aura toujours notre dll “Common” mais on va modifier un peu la classe “ContactRepository.cs”.</p>
<pre class="code"><span style="color:blue;">public class </span><span style="color:#2b91af;">ContactRepository
</span>{
    <span style="color:blue;">protected </span><span style="color:#2b91af;">TableServiceContext </span>Context;
    <span style="color:blue;">public const string </span>TABLENAME = <span style="color:#a31515;">&quot;Contacts&quot;</span>;
    <span style="color:blue;">public </span>ContactRepository()
    {
        Initialize();
    }

    <span style="color:green;">//création du client pour accéder à l’Azure Storage
    </span><span style="color:blue;">private void </span>Initialize()
    {
        <span style="color:blue;">try
        </span>{
            <span style="color:#2b91af;">CloudStorageAccount </span>storageAccount = <span style="color:#2b91af;">CloudStorageAccount</span>.DevelopmentStorageAccount;
            <span style="color:#2b91af;">CloudTableClient </span>tableStorageClient = storageAccount.CreateCloudTableClient();
            tableStorageClient.CreateTableIfNotExist(TABLENAME);
            <span style="color:blue;">this</span>.Context = tableStorageClient.GetDataServiceContext();

            <span style="color:green;">// en local
            </span><span style="color:blue;">if </span>(storageAccount.Credentials.AccountName == <span style="color:#a31515;">&quot;devstoreaccount1&quot;</span>)
            {
                <span style="color:green;">// Dummy, requis pour synchroniser le schéma avec le Development storage
                </span><span style="color:blue;">var </span>dummyRow = <span style="color:blue;">new </span><span style="color:#2b91af;">ContactEntry</span>() { PartitionKey = <span style="color:#a31515;">&quot;Dummy&quot;</span>, RowKey = <span style="color:#2b91af;">Guid</span>.NewGuid().ToString() };
                <span style="color:blue;">this</span>.Context.AddObject(TABLENAME, dummyRow);
                <span style="color:blue;">this</span>.Context.SaveChangesWithRetries();
                <span style="color:blue;">this</span>.Context.DeleteObject(dummyRow);
                <span style="color:blue;">this</span>.Context.SaveChangesWithRetries();
            }
        }
        <span style="color:blue;">catch </span>(<span style="color:#2b91af;">Exception </span>ex)
        {

        }

    }</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Les CRUD, ne changent pas, ou presque …</p>
<p>&#160;</p>
<p><span id="more-212"></span></p>
<p>&#160;</p>
<pre class="code"><span style="color:blue;">public void </span>DeleteContact(<span style="color:#2b91af;">ContactEntry </span>entry)
{
    <span style="color:blue;">if </span>(entry != <span style="color:blue;">null</span>)
    {
        <span style="color:blue;">this</span>.Context.DeleteObject(entry);
        <span style="color:blue;">this</span>.Context.SaveChanges();
    }

}

<span style="color:blue;">public </span><span style="color:#2b91af;">ContactEntry </span>UpdateContact(<span style="color:#2b91af;">ContactEntry </span>entry)
{
    <span style="color:blue;">if </span>(entry != <span style="color:blue;">null</span>)
    {
        <span style="color:blue;">this</span>.Context.UpdateObject(entry);
        <span style="color:blue;">this</span>.Context.SaveChanges();
    }
    <span style="color:blue;">return </span>entry;
}
  </pre>
<p><a href="http://11011.net/software/vspaste"></a>Vous remarquerez (ou pas), que par rapport au poste précédent, on ne fait pas d’aller retour pour aller récupérer l’objet dans l’Azure Table (pour se resynchroniser). Je n’arrive pas à comprendre pourquoi en WPF on y arrive comme ça et pas en ASP.NET. J’attends vos retours là dessus <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  !</p>
<p>&#160;</p>
<p>Côté WPF : On va binder notre collection de ContactEntry sur un listbox avec&#160; un coup de mutli binding ( “merci Wilfried Woivre <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  !” )</p>
<p>&#160;</p>
<pre class="code"><span style="color:blue;">&lt;</span><span style="color:#a31515;">Grid </span><span style="color:red;">Background</span><span style="color:blue;">=&quot;Black&quot; </span><span style="color:red;">Width</span><span style="color:blue;">=&quot;396&quot;&gt;
        &lt;</span><span style="color:#a31515;">Image </span><span style="color:red;">Source</span><span style="color:blue;">=&quot;cloud.png&quot; </span><span style="color:red;">Stretch</span><span style="color:blue;">=&quot;Fill&quot; </span><span style="color:red;">Margin</span><span style="color:blue;">=&quot;0,-2,-16,-16&quot; /&gt;
        &lt;</span><span style="color:#a31515;">Button </span><span style="color:red;">x</span><span style="color:blue;">:</span><span style="color:red;">Name</span><span style="color:blue;">=&quot;btnLoad&quot; </span><span style="color:red;">HorizontalAlignment</span><span style="color:blue;">=&quot;Right&quot; </span><span style="color:red;">Margin</span><span style="color:blue;">=&quot;0,39,22,0&quot; </span><span style="color:red;">VerticalAlignment</span><span style="color:blue;">=&quot;Top&quot; </span><span style="color:red;">Width</span><span style="color:blue;">=&quot;75&quot; </span><span style="color:red;">Height</span><span style="color:blue;">=&quot;23&quot; </span><span style="color:red;">Content</span><span style="color:blue;">=&quot;Load&quot;/&gt;
        &lt;</span><span style="color:#a31515;">TextBlock </span><span style="color:red;">Margin</span><span style="color:blue;">=&quot;163,64,148,0&quot; </span><span style="color:red;">VerticalAlignment</span><span style="color:blue;">=&quot;Top&quot; </span><span style="color:red;">Height</span><span style="color:blue;">=&quot;24&quot; </span><span style="color:red;">FontSize</span><span style="color:blue;">=&quot;18.667&quot; </span><span style="color:red;">FontStyle</span><span style="color:blue;">=&quot;Italic&quot; </span><span style="color:red;">FontWeight</span><span style="color:blue;">=&quot;Bold&quot; </span><span style="color:red;">Text</span><span style="color:blue;">=&quot;Contacts&quot; </span><span style="color:red;">TextWrapping</span><span style="color:blue;">=&quot;Wrap&quot; </span><span style="color:red;">d</span><span style="color:blue;">:</span><span style="color:red;">LayoutOverrides</span><span style="color:blue;">=&quot;Width&quot; /&gt;
        &lt;</span><span style="color:#a31515;">Button </span><span style="color:red;">x</span><span style="color:blue;">:</span><span style="color:red;">Name</span><span style="color:blue;">=&quot;btnDelete&quot; </span><span style="color:red;">Margin</span><span style="color:blue;">=&quot;0,0,22,122&quot; </span><span style="color:red;">VerticalAlignment</span><span style="color:blue;">=&quot;Bottom&quot; </span><span style="color:red;">Height</span><span style="color:blue;">=&quot;23&quot; </span><span style="color:red;">Content</span><span style="color:blue;">=&quot;Delete&quot; </span><span style="color:red;">HorizontalAlignment</span><span style="color:blue;">=&quot;Right&quot; </span><span style="color:red;">Width</span><span style="color:blue;">=&quot;75&quot;/&gt;
        &lt;</span><span style="color:#a31515;">TextBox </span><span style="color:red;">Height</span><span style="color:blue;">=&quot;23&quot; </span><span style="color:red;">HorizontalAlignment</span><span style="color:blue;">=&quot;Left&quot; </span><span style="color:red;">Margin</span><span style="color:blue;">=&quot;18,93,0,0&quot; </span><span style="color:red;">x</span><span style="color:blue;">:</span><span style="color:red;">Name</span><span style="color:blue;">=&quot;tbFirstName&quot; </span><span style="color:red;">VerticalAlignment</span><span style="color:blue;">=&quot;Top&quot; </span><span style="color:red;">Width</span><span style="color:blue;">=&quot;120&quot; /&gt;
        &lt;</span><span style="color:#a31515;">TextBox </span><span style="color:red;">Height</span><span style="color:blue;">=&quot;23&quot; </span><span style="color:red;">Margin</span><span style="color:blue;">=&quot;145,94,0,0&quot; </span><span style="color:red;">x</span><span style="color:blue;">:</span><span style="color:red;">Name</span><span style="color:blue;">=&quot;tbLastName&quot; </span><span style="color:red;">VerticalAlignment</span><span style="color:blue;">=&quot;Top&quot; </span><span style="color:red;">HorizontalAlignment</span><span style="color:blue;">=&quot;Left&quot; </span><span style="color:red;">Width</span><span style="color:blue;">=&quot;103&quot; /&gt;
        &lt;</span><span style="color:#a31515;">TextBox </span><span style="color:red;">Height</span><span style="color:blue;">=&quot;23&quot; </span><span style="color:red;">HorizontalAlignment</span><span style="color:blue;">=&quot;Right&quot; </span><span style="color:red;">Margin</span><span style="color:blue;">=&quot;0,94,22,0&quot; </span><span style="color:red;">x</span><span style="color:blue;">:</span><span style="color:red;">Name</span><span style="color:blue;">=&quot;tbPhoneNumber&quot; </span><span style="color:red;">VerticalAlignment</span><span style="color:blue;">=&quot;Top&quot; </span><span style="color:red;">Width</span><span style="color:blue;">=&quot;120&quot; /&gt;
        &lt;</span><span style="color:#a31515;">Button </span><span style="color:red;">Height</span><span style="color:blue;">=&quot;23&quot; </span><span style="color:red;">Margin</span><span style="color:blue;">=&quot;0,67.674,22,0&quot; </span><span style="color:red;">x</span><span style="color:blue;">:</span><span style="color:red;">Name</span><span style="color:blue;">=&quot;btnAdd&quot; </span><span style="color:red;">VerticalAlignment</span><span style="color:blue;">=&quot;Top&quot; </span><span style="color:red;">Click</span><span style="color:blue;">=&quot;btnAdd_Click&quot; </span><span style="color:red;">Content</span><span style="color:blue;">=&quot;Add&quot; </span><span style="color:red;">HorizontalAlignment</span><span style="color:blue;">=&quot;Right&quot; </span><span style="color:red;">Width</span><span style="color:blue;">=&quot;75&quot; /&gt;
        &lt;</span><span style="color:#a31515;">Button </span><span style="color:red;">Height</span><span style="color:blue;">=&quot;23&quot; </span><span style="color:red;">Margin</span><span style="color:blue;">=&quot;0,123,22,0&quot; </span><span style="color:red;">x</span><span style="color:blue;">:</span><span style="color:red;">Name</span><span style="color:blue;">=&quot;btnUpdate&quot; </span><span style="color:red;">VerticalAlignment</span><span style="color:blue;">=&quot;Top&quot; </span><span style="color:red;">Click</span><span style="color:blue;">=&quot;btnUpdate_Click&quot; </span><span style="color:red;">Content</span><span style="color:blue;">=&quot;Update&quot; </span><span style="color:red;">HorizontalAlignment</span><span style="color:blue;">=&quot;Right&quot; </span><span style="color:red;">Width</span><span style="color:blue;">=&quot;75&quot; /&gt;
        &lt;</span><span style="color:#a31515;">ListBox </span><span style="color:red;">x</span><span style="color:blue;">:</span><span style="color:red;">Name</span><span style="color:blue;">=&quot;lbContacts&quot; </span><span style="color:red;">ItemsSource</span><span style="color:blue;">=&quot;{</span><span style="color:#a31515;">Binding</span><span style="color:blue;">}&quot; </span><span style="color:red;">IsSynchronizedWithCurrentItem</span><span style="color:blue;">=&quot;True&quot; </span><span style="color:red;">Margin</span><span style="color:blue;">=&quot;21,0,22,23&quot; </span><span style="color:red;">BorderBrush</span><span style="color:blue;">=&quot;{</span><span style="color:#a31515;">x</span><span style="color:blue;">:</span><span style="color:#a31515;">Null</span><span style="color:blue;">}&quot; </span><span style="color:red;">Background</span><span style="color:blue;">=&quot;{</span><span style="color:#a31515;">x</span><span style="color:blue;">:</span><span style="color:#a31515;">Null</span><span style="color:blue;">}&quot; </span><span style="color:red;">Foreground</span><span style="color:blue;">=&quot;{</span><span style="color:#a31515;">x</span><span style="color:blue;">:</span><span style="color:#a31515;">Null</span><span style="color:blue;">}&quot; </span><span style="color:red;">Height</span><span style="color:blue;">=&quot;93&quot; </span><span style="color:red;">VerticalAlignment</span><span style="color:blue;">=&quot;Bottom&quot;&gt;
            &lt;</span><span style="color:#a31515;">ListBox.ItemTemplate</span><span style="color:blue;">&gt;
                &lt;</span><span style="color:#a31515;">DataTemplate</span><span style="color:blue;">&gt;
                    &lt;</span><span style="color:#a31515;">TextBlock </span><span style="color:red;">Foreground</span><span style="color:blue;">=&quot;White&quot; </span><span style="color:red;">FontStyle</span><span style="color:blue;">=&quot;Italic&quot;&gt;
                        &lt;</span><span style="color:#a31515;">TextBlock.Text</span><span style="color:blue;">&gt;
                            &lt;</span><span style="color:#a31515;">MultiBinding </span><span style="color:red;">StringFormat</span><span style="color:blue;">=&quot;{}{0} {1} {2}&quot;&gt;
                                &lt;</span><span style="color:#a31515;">Binding </span><span style="color:red;">Path</span><span style="color:blue;">=&quot;FirstName&quot; </span><span style="color:red;">Mode</span><span style="color:blue;">=&quot;TwoWay&quot; /&gt;
                                &lt;</span><span style="color:#a31515;">Binding </span><span style="color:red;">Path</span><span style="color:blue;">=&quot;LastName&quot; </span><span style="color:red;">Mode</span><span style="color:blue;">=&quot;TwoWay&quot; /&gt;
                                &lt;</span><span style="color:#a31515;">Binding </span><span style="color:red;">Path</span><span style="color:blue;">=&quot;PhoneNumber&quot; </span><span style="color:red;">Mode</span><span style="color:blue;">=&quot;TwoWay&quot;/&gt;
                            &lt;/</span><span style="color:#a31515;">MultiBinding</span><span style="color:blue;">&gt;
                        &lt;/</span><span style="color:#a31515;">TextBlock.Text</span><span style="color:blue;">&gt;
                    &lt;/</span><span style="color:#a31515;">TextBlock</span><span style="color:blue;">&gt;
                &lt;/</span><span style="color:#a31515;">DataTemplate</span><span style="color:blue;">&gt;
            &lt;/</span><span style="color:#a31515;">ListBox.ItemTemplate</span><span style="color:blue;">&gt;
        &lt;/</span><span style="color:#a31515;">ListBox</span><span style="color:blue;">&gt;
    &lt;/</span><span style="color:#a31515;">Grid</span><span style="color:blue;">&gt;</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>&#160;</p>
<p>Dans le code behind, je vais spécifier mon Repository et ma liste de ContactEntry (qui sera au passage une ObservableCollection pour faciliter le binding).</p>
<p>&#160;</p>
<pre class="code"><span style="color:#2b91af;">ContactRepository </span>contact;
<span style="color:#2b91af;">ObservableCollection</span>&lt;<span style="color:#2b91af;">ContactEntry</span>&gt; contactsList = <span style="color:blue;">new </span><span style="color:#2b91af;">ObservableCollection</span>&lt;<span style="color:#2b91af;">ContactEntry</span>&gt;();</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Dans le chargement de mon application j’aurai :</p>
<pre class="code">contact = <span style="color:blue;">new </span><span style="color:#2b91af;">ContactRepository</span>();
lbContacts.DataContext = contactsList;

<span style="color:blue;">foreach </span>(<span style="color:#2b91af;">ContactEntry </span>c <span style="color:blue;">in </span>contact.GetContactsList())
{

    contactsList.Add(c);
}</pre>
<p>&#160;</p>
<p>Et mes cruds :</p>
<blockquote>
<p>- Ajout</p>
</blockquote>
<pre class="code"><span style="color:blue;">private void </span>btnAdd_Click(<span style="color:blue;">object </span>sender, <span style="color:#2b91af;">RoutedEventArgs </span>e)
{
   <span style="color:#2b91af;">ContactEntry </span>mycontacy = <span style="color:blue;">new </span><span style="color:#2b91af;">ContactEntry </span>{
       FirstName = tbFirstName.Text,
       LastName = tbLastName.Text,
       PhoneNumber = tbPhoneNumber.Text };
   contact.InsertContact(mycontacy);
   contactsList.Add(mycontacy);
}</pre>
<p>&#160;</p>
<blockquote>
<p>- Supression</p>
</blockquote>
<pre class="code"><span style="color:blue;">void </span>btnDelete_Click(<span style="color:blue;">object </span>sender, <span style="color:#2b91af;">RoutedEventArgs </span>e)
{
    <span style="color:blue;">var </span>mycontact = lbContacts.SelectedItem <span style="color:blue;">as </span><span style="color:#2b91af;">ContactEntry</span>;
    contact.DeleteContact(mycontact);
    contactsList.Remove(mycontact);
    lbContacts.UnselectAll();
    tbFirstName.Clear();
    tbLastName.Clear();
    tbPhoneNumber.Clear();
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<blockquote>
<p>- Modification </p>
</blockquote>
<pre class="code"><span style="color:blue;">private void </span>btnUpdate_Click(<span style="color:blue;">object </span>sender, <span style="color:#2b91af;">RoutedEventArgs </span>e)
{
    <span style="color:blue;">var </span>mycontact = lbContacts.SelectedItem <span style="color:blue;">as </span><span style="color:#2b91af;">ContactEntry</span>;
    <span style="color:blue;">if </span>(mycontact != <span style="color:blue;">null</span>)
    {

        mycontact.FirstName = tbFirstName.Text;
        mycontact.LastName = tbLastName.Text;
        mycontact.PhoneNumber = tbPhoneNumber.Text;
        contact.UpdateContact(mycontact);
        contactsList[lbContacts.SelectedIndex] = mycontact;
        lbContacts.DataContext = <span style="color:blue;">null</span>;
        lbContacts.DataContext = contactsList;
        lbContacts.UnselectAll();
        tbFirstName.Clear();
        tbLastName.Clear();
        tbPhoneNumber.Clear();
    }
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<blockquote>
<p>- Et pour le fun, quand je clique sur ma listbox je charge mes données dans les textbox</p>
</blockquote>
<pre class="code"><span style="color:blue;">void </span>lbContacts_SelectionChanged(<span style="color:blue;">object </span>sender, <span style="color:#2b91af;">SelectionChangedEventArgs </span>e)
{
    <span style="color:blue;">if </span>(lbContacts.SelectedIndex != -1)
    {
        <span style="color:blue;">var </span>mycontact = lbContacts.Items[lbContacts.SelectedIndex] <span style="color:blue;">as </span><span style="color:#2b91af;">ContactEntry</span>;
        tbFirstName.Text = mycontact.FirstName;
        tbLastName.Text = mycontact.LastName;
        tbPhoneNumber.Text = mycontact.PhoneNumber;
    }
}</pre>
<p><a href="http://11011.net/software/vspaste"></a>Et voilà on a une application fonctionnelle qui manipule une Azure Table.</p>
<p>&#160;</p>
<p><a href="http://dorianlamande.files.wordpress.com/2010/03/image3.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2010/03/image_thumb3.png?w=244&#038;h=190" width="244" height="190" /></a> </p>
<p>&#160;</p>
<p>Dorian LAMANDE</p>
<p>Stagiaire Ingénieur chez <a href="http://www.wygwam.com">Wygwam</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dorianlamande.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dorianlamande.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dorianlamande.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dorianlamande.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dorianlamande.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dorianlamande.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dorianlamande.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dorianlamande.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dorianlamande.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dorianlamande.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dorianlamande.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dorianlamande.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dorianlamande.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dorianlamande.wordpress.com/212/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=212&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dorianlamande.wordpress.com/2010/03/26/microsoft-windows-azure-azure-tables-et-wpf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c45f6dc0ddf06234d1a231875ea50c0f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dorianlamande</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/03/image_thumb3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Microsoft Windows Azure : Les Azure Tables</title>
		<link>http://dorianlamande.wordpress.com/2010/03/23/microsoft-windows-azure-les-azure-tables/</link>
		<comments>http://dorianlamande.wordpress.com/2010/03/23/microsoft-windows-azure-les-azure-tables/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 11:35:00 +0000</pubDate>
		<dc:creator>Dorian LAMANDE</dc:creator>
				<category><![CDATA[Windows Azure]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Storage]]></category>
		<category><![CDATA[Table]]></category>

		<guid isPermaLink="false">http://dorianlamande.wordpress.com/2010/03/23/microsoft-windows-azure-les-azure-tables/</guid>
		<description><![CDATA[Cela fait un moment que j’ai envie de faire un petit article sur la plateforme Azure. Aujourd’hui je vous propose de nous intéresser aux Azure Tables. Les Azure Tables font parties des services Azure Storage qui sont par ailleurs tous exposés en REST. Nous allons utiliser la dll Microsoft.WindowsAzure.StorageClient fournie par Microsoft dans le SDK (v1.1). [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=200&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Cela fait un moment que j’ai envie de faire un petit article sur la plateforme Azure.</p>
<p>Aujourd’hui je vous propose de nous intéresser aux Azure Tables.</p>
<p>Les Azure Tables font parties des services Azure Storage qui sont par ailleurs tous exposés en REST. Nous allons utiliser la dll Microsoft.WindowsAzure.StorageClient fournie par Microsoft dans le SDK (v1.1).</p>
<p>Les Azure Tables ne sont pas à confondre avec une base de données relationnelle. Ce sont de simples tables avec des données de type clé/valeur.</p>
<p>Je vous propose maintenant de jouer avec les Azure Tables.</p>
<p>Pour cela on va créer une petite application de gestion de contacts.</p>
<p>Ouvrons notre IDE préféré : Visual Studio. <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Nous allons créer un nouveau projet, appelons-le, AzureTableStorage.</p>
<p>On va tout de suite ajouter un projet de type library pour pouvoir séparer notre accès aux Azure tables et notre interface utilisateur en ASP.NET.</p>
<p>Voici donc notre architecture :</p>
<p><a href="http://dorianlamande.files.wordpress.com/2010/03/image.png"><img style="display:inline;border-width:0;" title="image" src="http://dorianlamande.files.wordpress.com/2010/03/image_thumb.png?w=244&#038;h=77" border="0" alt="image" width="244" height="77" /></a></p>
<p><span id="more-200"></span></p>
<p>Ajouter les références suivantes :</p>
<blockquote><p>- Microsoft.WindowsAzure.StorageClient</p>
<p>- System.Data.Services.Client</p></blockquote>
<p>Ajouter la classe ContactEntry.cs : cette classe sera notre modèle de données.</p>
<pre class="code"><span style="color:blue;">public class </span><span style="color:#2b91af;">ContactEntry </span>: <span style="color:#2b91af;">TableServiceEntity
</span>{
    <span style="color:blue;">public </span>ContactEntry() { }
    <span style="color:blue;">public </span>ContactEntry(<span style="color:blue;">string </span>rowkey)
    {
        <span style="color:blue;">this</span>.RowKey = rowkey;
    }

    <span style="color:blue;">public string </span>FirstName { <span style="color:blue;">get</span>; <span style="color:blue;">set</span>; }
    <span style="color:blue;">public string </span>LastName { <span style="color:blue;">get</span>; <span style="color:blue;">set</span>; }
    <span style="color:blue;">public string </span>PhoneNumber { <span style="color:blue;">get</span>; <span style="color:blue;">set</span>; }

}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Ici j’utilise la rowkey pour pouvoir accéder à une entité unique. On verra un peu plus loin où je spécifie la PartitionKey.</p>
<p>A noter que  grâce au couple PartitionKey/RowKey, la plateforme Azure est capable de retrouver l’emplacement sur le serveur de l’entité recherchée.</p>
<p>Ajouter maintenant la classe ContactRepository.cs : c’est dans cette classe que l’on va accéder aux Azure Tables.</p>
<pre class="code"><span style="color:blue;">protected </span><span style="color:#2b91af;">TableServiceContext </span>Context;
<span style="color:blue;">public const string </span>TABLENAME = <span style="color:#a31515;">"Contacts"</span>;</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<pre class="code"><span style="color:blue;">public </span>ContactRepository()
        {
            Initialize();
        }

        <span style="color:green;">//création du client pour accéder à l’Azure Storage
        </span><span style="color:blue;">private void </span>Initialize()
        {
            <span style="color:blue;">try
            </span>{
                <span style="color:blue;">var </span>storageAccount = <span style="color:#2b91af;">CloudStorageAccount</span>.FromConfigurationSetting(<span style="color:#a31515;">"StorageAccountConnectionString"</span>);
                <span style="color:blue;">var </span>tableStorageClient = <span style="color:blue;">new </span><span style="color:#2b91af;">CloudTableClient</span>(storageAccount.TableEndpoint.ToString(), storageAccount.Credentials);
                <span style="color:blue;">this</span>.Context = tableStorageClient.GetDataServiceContext();

                tableStorageClient.CreateTableIfNotExist(TABLENAME);

                <span style="color:green;">// en local
                </span><span style="color:blue;">if </span>(storageAccount.Credentials.AccountName == <span style="color:#a31515;">"devstoreaccount1"</span>)
                {
                    <span style="color:green;">// Dummy, requis pour synchroniser le schéma avec le Development storage
                    </span><span style="color:blue;">var </span>dummyRow = <span style="color:blue;">new </span><span style="color:#2b91af;">ContactEntry</span>() { PartitionKey = <span style="color:#a31515;">"Dummy"</span>, RowKey = <span style="color:#2b91af;">Guid</span>.NewGuid().ToString() };
                    <span style="color:blue;">this</span>.Context.AddObject(TABLENAME, dummyRow);
                    <span style="color:blue;">this</span>.Context.SaveChangesWithRetries();
                    <span style="color:blue;">this</span>.Context.DeleteObject(dummyRow);
                    <span style="color:blue;">this</span>.Context.SaveChangesWithRetries();
                }
            }
            <span style="color:blue;">catch </span>(<span style="color:#2b91af;">Exception </span>ex)
            {
                <span style="color:#2b91af;">Trace</span>.TraceError(ex.ToString());
            }

        }</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p><a href="http://11011.net/software/vspaste"></a>N’oubliez pas de spécifier dans le WebRole le “StorageAccountConnectionString”.</p>
<p><a href="http://dorianlamande.files.wordpress.com/2010/03/image1.png"><img style="display:inline;border:0;" title="image" src="http://dorianlamande.files.wordpress.com/2010/03/image_thumb1.png?w=244&#038;h=146" border="0" alt="image" width="244" height="146" /></a></p>
<p>Nous allons donc maintenant faire nos CRUD :</p>
<p>Ajout d’un contact :</p>
<pre class="code"><span style="color:blue;">public </span><span style="color:#2b91af;">ContactEntry </span>InsertContact(<span style="color:#2b91af;">ContactEntry </span>entry)
        {
            entry.PartitionKey = <span style="color:#a31515;">"ContactsPartitionKey"</span>; <span style="color:green;">

            </span>entry.RowKey = <span style="color:#2b91af;">Guid</span>.NewGuid().ToString();</pre>
<pre class="code"><span style="color:green;">            </span><span style="color:blue;">this</span>.Context.AddObject(TABLENAME, entry);
            <span style="color:blue;">this</span>.Context.SaveChanges();
            <span style="color:blue;">return </span>entry;
        }</pre>
<p>C’est ici que je viens spécifier la partitionKey.</p>
<p>Modification d’un contact :</p>
<pre class="code"><span style="color:blue;">public </span><span style="color:#2b91af;">ContactEntry </span>UpdateContact(<span style="color:#2b91af;">ContactEntry </span>entry)
{
    <span style="color:#2b91af;">ContactEntry </span>myentry = <span style="color:blue;">this</span>.GetContactEntryByKey(entry.RowKey);
    myentry.LastName = entry.LastName;
    myentry.FirstName = entry.FirstName;
    myentry.PhoneNumber = entry.PhoneNumber;
    <span style="color:blue;">this</span>.Context.UpdateObject(myentry);
    <span style="color:blue;">this</span>.Context.SaveChanges();
    <span style="color:blue;">return </span>myentry;
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Je ne sais pas encore pour quelle raison, mais on est obligé de récupérer l’objet dans l’Azure avant de le modifier (de même pour la suppression). Pour cela on va avoir besoin des méthodes suivantes :</p>
<pre class="code"><span style="color:blue;">public </span><span style="color:#2b91af;">ContactEntry </span>GetContactEntryByKey(<span style="color:blue;">string </span>key)
        {
            <span style="color:blue;">return this</span>.Table.Where(e =&gt; e.RowKey == key).FirstOrDefault();
        }</pre>
<pre class="code"><span style="color:blue;">public </span><span style="color:#2b91af;">IQueryable</span>&lt;<span style="color:#2b91af;">ContactEntry</span>&gt; Table
{
    <span style="color:blue;">get
    </span>{
        <span style="color:blue;">return this</span>.Context.CreateQuery&lt;<span style="color:#2b91af;">ContactEntry</span>&gt;(TABLENAME);
    }
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Suppression d’un contact:</p>
<pre class="code"><span style="color:blue;">public void </span>DeleteContact(<span style="color:#2b91af;">ContactEntry </span>entry)
        {
            <span style="color:#2b91af;">ContactEntry </span>myentry = <span style="color:blue;">this</span>.GetContactEntryByKey(entry.RowKey);
            <span style="color:blue;">this</span>.Context.DeleteObject(myentry);
            <span style="color:blue;">this</span>.Context.SaveChanges();

        }</pre>
<p><a href="http://11011.net/software/vspaste"></a>Enfin on peut aussi récupérer toute la liste des contacts :</p>
<pre class="code"><span style="color:blue;">public </span><span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">ContactEntry</span>&gt; GetContactsList()
        {
            <span style="color:blue;">var </span>query = (<span style="color:blue;">from </span>msg <span style="color:blue;">in </span>Table
                         <span style="color:blue;">select </span>msg).AsTableServiceQuery();
            <span style="color:#2b91af;">IEnumerable</span>&lt;<span style="color:#2b91af;">ContactEntry</span>&gt; entries = query.Execute().OrderByDescending(m =&gt; m.FirstName);
            <span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">ContactEntry</span>&gt; list = <span style="color:blue;">new </span><span style="color:#2b91af;">List</span>&lt;<span style="color:#2b91af;">ContactEntry</span>&gt;(entries);
            <span style="color:blue;">return </span>list;
        }</pre>
<p><a href="http://11011.net/software/vspaste"></a>Notre accès est maintenant terminé ! Nous allons nous occuper de notre WebRole.</p>
<p>Sur la page default.aspx ajouter le code suivant :</p>
<pre class="code"><span style="color:blue;">&lt;</span><span style="color:#a31515;">form </span><span style="color:red;">id</span><span style="color:blue;">="form1" </span><span style="color:red;">runat</span><span style="color:blue;">="server"&gt;
    &lt;</span><span style="color:#a31515;">div</span><span style="color:blue;">&gt;
        &lt;</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">Label </span><span style="color:red;">ID</span><span style="color:blue;">="lblFirstName" </span><span style="color:red;">runat</span><span style="color:blue;">="server" </span><span style="color:red;">Text</span><span style="color:blue;">="FirstName : "&gt;&lt;/</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">Label</span><span style="color:blue;">&gt;
        &lt;</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">TextBox </span><span style="color:red;">ID</span><span style="color:blue;">="tbFirstName" </span><span style="color:red;">runat</span><span style="color:blue;">="server"&gt;&lt;/</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">TextBox</span><span style="color:blue;">&gt; &lt;</span><span style="color:#a31515;">br </span><span style="color:blue;">/&gt;
        &lt;</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">Label </span><span style="color:red;">ID</span><span style="color:blue;">="lblLastName" </span><span style="color:red;">runat</span><span style="color:blue;">="server" </span><span style="color:red;">Text</span><span style="color:blue;">="LastName : "&gt;&lt;/</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">Label</span><span style="color:blue;">&gt;
        &lt;</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">TextBox </span><span style="color:red;">ID</span><span style="color:blue;">="tbLastName" </span><span style="color:red;">runat</span><span style="color:blue;">="server"&gt;&lt;/</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">TextBox</span><span style="color:blue;">&gt; &lt;</span><span style="color:#a31515;">br </span><span style="color:blue;">/&gt;
        &lt;</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">Label </span><span style="color:red;">ID</span><span style="color:blue;">="lblPhoneNumber" </span><span style="color:red;">runat</span><span style="color:blue;">="server" </span><span style="color:red;">Text</span><span style="color:blue;">="PhoneNumber : "&gt;&lt;/</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">Label</span><span style="color:blue;">&gt;
        &lt;</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">TextBox </span><span style="color:red;">ID</span><span style="color:blue;">="tbPhoneNumber" </span><span style="color:red;">runat</span><span style="color:blue;">="server"&gt;&lt;/</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">TextBox</span><span style="color:blue;">&gt;
        &lt;</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">Button </span><span style="color:red;">ID</span><span style="color:blue;">="btnValidate" </span><span style="color:red;">runat</span><span style="color:blue;">="server" </span><span style="color:red;">onclick</span><span style="color:blue;">="btnValidate_Click"
            </span><span style="color:red;">Text</span><span style="color:blue;">="Validate" /&gt;
            &lt;</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">Button </span><span style="color:red;">ID</span><span style="color:blue;">="btnUpdate" </span><span style="color:red;">runat</span><span style="color:blue;">="server" </span><span style="color:red;">Text</span><span style="color:blue;">="Update" </span><span style="color:red;">Visible</span><span style="color:blue;">="false"
            </span><span style="color:red;">onclick</span><span style="color:blue;">="btnUpdate_Click" /&gt;

        &lt;</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">GridView </span><span style="color:red;">ID</span><span style="color:blue;">="GridView1" </span><span style="color:red;">runat</span><span style="color:blue;">="server" </span><span style="color:red;">AutoGenerateColumns</span><span style="color:blue;">="True"
            </span><span style="color:red;">DataSourceID</span><span style="color:blue;">="dataSource" </span><span style="color:red;">DataKeyNames</span><span style="color:blue;">="RowKey"
            </span><span style="color:red;">AutoGenerateSelectButton</span><span style="color:blue;">="True"
            </span><span style="color:red;">onselectedindexchanged</span><span style="color:blue;">="GridView1_SelectedIndexChanged"&gt;
            &lt;</span><span style="color:#a31515;">Columns</span><span style="color:blue;">&gt;
                &lt;</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">CommandField </span><span style="color:red;">ShowDeleteButton</span><span style="color:blue;">="True" /&gt;
            &lt;/</span><span style="color:#a31515;">Columns</span><span style="color:blue;">&gt;
        &lt;/</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">GridView</span><span style="color:blue;">&gt;
    &lt;/</span><span style="color:#a31515;">div</span><span style="color:blue;">&gt;
    &lt;</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">ObjectDataSource </span><span style="color:red;">ID</span><span style="color:blue;">="dataSource" </span><span style="color:red;">runat</span><span style="color:blue;">="server"
        </span><span style="color:red;">DataObjectTypeName</span><span style="color:blue;">="AzureTableStorageCommon.ContactEntry"
        </span><span style="color:red;">DeleteMethod</span><span style="color:blue;">="DeleteContact" </span><span style="color:red;">InsertMethod</span><span style="color:blue;">="InsertContact"
        </span><span style="color:red;">SelectMethod</span><span style="color:blue;">="GetContactsList"
        </span><span style="color:red;">TypeName</span><span style="color:blue;">="AzureTableStorageCommon.ContactRepository"
        </span><span style="color:red;">UpdateMethod</span><span style="color:blue;">="UpdateContact"&gt;&lt;/</span><span style="color:#a31515;">asp</span><span style="color:blue;">:</span><span style="color:#a31515;">ObjectDataSource</span><span style="color:blue;">&gt;
    &lt;/</span><span style="color:#a31515;">form</span><span style="color:blue;">&gt;</span></pre>
<p><a href="http://11011.net/software/vspaste"></a>Et dans le code behind :</p>
<pre class="code"><span style="color:blue;">private </span><span style="color:#2b91af;">ContactRepository </span>contactStorage;
        <span style="color:blue;">string </span>rowkey;
        <span style="color:blue;">protected void </span>Page_Load(<span style="color:blue;">object </span>sender, <span style="color:#2b91af;">EventArgs </span>e)
        {
            contactStorage = <span style="color:blue;">new </span><span style="color:#2b91af;">ContactRepository</span>();
        }

        <span style="color:blue;">protected void </span>btnValidate_Click(<span style="color:blue;">object </span>sender, <span style="color:#2b91af;">EventArgs </span>e)
        {
            contactStorage.InsertContact(<span style="color:blue;">new </span><span style="color:#2b91af;">ContactEntry</span>()
            {
                FirstName = tbFirstName.Text,
                LastName = tbLastName.Text,
                PhoneNumber = tbPhoneNumber.Text
            });

            tbFirstName.Text = tbLastName.Text = tbPhoneNumber.Text = <span style="color:blue;">string</span>.Empty;
            <span style="color:blue;">this</span>.GridView1.DataBind();
        }

        <span style="color:blue;">protected void </span>GridView1_SelectedIndexChanged(<span style="color:blue;">object </span>sender, <span style="color:#2b91af;">EventArgs </span>e)
        {
            <span style="color:blue;">this</span>.btnUpdate.Visible = <span style="color:blue;">true</span>;
            <span style="color:blue;">this</span>.btnValidate.Visible = <span style="color:blue;">false</span>;
            <span style="color:#2b91af;">GridViewRow </span>selectRow = (sender <span style="color:blue;">as </span><span style="color:#2b91af;">GridView</span>).SelectedRow;

            tbFirstName.Text = selectRow.Cells[2].Text;
            tbLastName.Text = selectRow.Cells[3].Text;
            tbPhoneNumber.Text = selectRow.Cells[4].Text;
            ViewState[<span style="color:#a31515;">"rowkey"</span>] = selectRow.Cells[7].Text;
            ViewState[<span style="color:#a31515;">"partitionkey"</span>] = selectRow.Cells[6].Text;

        }

        <span style="color:blue;">protected void </span>btnUpdate_Click(<span style="color:blue;">object </span>sender, <span style="color:#2b91af;">EventArgs </span>e)
        {
            <span style="color:blue;">this</span>.btnUpdate.Visible = <span style="color:blue;">false</span>;
            <span style="color:blue;">this</span>.btnValidate.Visible = <span style="color:blue;">true</span>;

            contactStorage.UpdateContact(<span style="color:blue;">new </span><span style="color:#2b91af;">ContactEntry</span>(ViewState[<span style="color:#a31515;">"rowkey"</span>].ToString())
            {

                FirstName = tbFirstName.Text,
                LastName = tbLastName.Text,
                PhoneNumber = tbPhoneNumber.Text,

            });

            <span style="color:blue;">this</span>.GridView1.DataBind();
        }</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Je ne rentre pas plus en détail. On est dans une application ASP.NET classique.</p>
<p>Voici le résultat</p>
<p><a href="http://dorianlamande.files.wordpress.com/2010/03/image2.png"><img style="display:inline;border:0;" title="image" src="http://dorianlamande.files.wordpress.com/2010/03/image_thumb2.png?w=244&#038;h=184" border="0" alt="image" width="244" height="184" /></a></p>
<p>Si vous avez envie d’aller encore plus loin, je vous invite à faire le coach atelier 3, réalisé par Sébastien Warin :</p>
<p><a title="http://msdn.microsoft.com/fr-fr/azure/ee622587.aspx" href="http://msdn.microsoft.com/fr-fr/azure/ee622587.aspx">http://msdn.microsoft.com/fr-fr/azure/ee622587.aspx</a></p>
<p>A bientôt.</p>
<p>Dorian LAMANDE</p>
<p>Stagiaire Ingénieur chez <a href="http://www.wygwam.com" target="_blank">Wygwam</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dorianlamande.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dorianlamande.wordpress.com/200/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dorianlamande.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dorianlamande.wordpress.com/200/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dorianlamande.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dorianlamande.wordpress.com/200/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dorianlamande.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dorianlamande.wordpress.com/200/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dorianlamande.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dorianlamande.wordpress.com/200/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dorianlamande.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dorianlamande.wordpress.com/200/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dorianlamande.wordpress.com/200/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dorianlamande.wordpress.com/200/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=200&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dorianlamande.wordpress.com/2010/03/23/microsoft-windows-azure-les-azure-tables/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c45f6dc0ddf06234d1a231875ea50c0f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dorianlamande</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/03/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/03/image_thumb1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2010/03/image_thumb2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Je vois des Windows Partout</title>
		<link>http://dorianlamande.wordpress.com/2010/02/10/je-vois-des-windows-partout/</link>
		<comments>http://dorianlamande.wordpress.com/2010/02/10/je-vois-des-windows-partout/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 17:26:00 +0000</pubDate>
		<dc:creator>Dorian LAMANDE</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[epsilab;emanon;concours;techdays]]></category>

		<guid isPermaLink="false">http://dorianlamande.wordpress.com/2010/02/10/je-vois-des-windows-partout/</guid>
		<description><![CDATA[L’équipe EMANON a participé à nouveau concours spécialement créé pour les Techdays : “Je vois des Windows partout”. Nous avons soumis le même document que pour la compétition Imagine Cup. Je suis par ailleurs mentor pour Emanon dans cette compétition. Emanon a été qualifié pour le round 2 d’Imagine Cup. En ce qui concerne le [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=191&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>L’équipe EMANON a participé à nouveau concours spécialement créé pour les Techdays : “Je vois des Windows partout”.</p>
<p>Nous avons soumis le même document que pour la compétition Imagine Cup. Je suis par ailleurs mentor pour Emanon dans cette compétition. Emanon a été qualifié pour le round 2 d’Imagine Cup.</p>
<p>En ce qui concerne le concours “Je vois des windows partout”, voici la vidéo réalisé lors des Techdays, en mode “One Shoot”.</p>
<div id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:0b034ddd-31c7-47f0-933b-08f82edcf0de" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<div><span style="text-align:center; display: block;"><a href="http://dorianlamande.wordpress.com/2010/02/10/je-vois-des-windows-partout/"><img src="http://img.youtube.com/vi/QylCtWuwjZY/2.jpg" alt="" /></a></span></div>
<div style="clear:both;font-size:.8em;">EMANON &#8211; Je vois des Windows Partout</div>
</div>
<p>Je vous communiquerai le résultat ASAP.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dorianlamande.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dorianlamande.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dorianlamande.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dorianlamande.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dorianlamande.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dorianlamande.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dorianlamande.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dorianlamande.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dorianlamande.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dorianlamande.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dorianlamande.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dorianlamande.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dorianlamande.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dorianlamande.wordpress.com/191/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=191&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dorianlamande.wordpress.com/2010/02/10/je-vois-des-windows-partout/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c45f6dc0ddf06234d1a231875ea50c0f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dorianlamande</media:title>
		</media:content>
	</item>
		<item>
		<title>Techdays 2010</title>
		<link>http://dorianlamande.wordpress.com/2009/12/20/techdays-2010/</link>
		<comments>http://dorianlamande.wordpress.com/2009/12/20/techdays-2010/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 20:42:10 +0000</pubDate>
		<dc:creator>Dorian LAMANDE</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[Techdays]]></category>

		<guid isPermaLink="false">http://dorianlamande.wordpress.com/2009/12/20/techdays-2010/</guid>
		<description><![CDATA[Les Techdays auront lieu les 08 09 &#38; 10 Février au Palais des Congrès à Paris. Au programme : - 3 conférence plénieres - + de 300 conférences techniques - 5500 m² d’exposition - 20 communautés exposants - Des experts à votre disposition ! Bien évidemment EPSILAB sera présent et aura son stand sur le [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=189&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img style="display:inline;margin-left:0;margin-right:0;border:0;" title="sitelaunch" src="http://dorianlamande.files.wordpress.com/2009/12/sitelaunch.png?w=244&#038;h=197" border="0" alt="sitelaunch" width="244" height="197" align="right" />Les Techdays auront lieu les 08 09 &amp; 10 Février au Palais des Congrès à Paris.</p>
<p>Au programme :</p>
<p>- 3 conférence plénieres<br />
- + de 300 conférences techniques<br />
- 5500 m² d’exposition<br />
- 20 communautés exposants<br />
- Des experts à votre disposition !</p>
<p>Bien évidemment EPSILAB sera présent et aura son stand sur le thème suivant : Cloud Computing &amp; Web !</p>
<p><a href="http://clk.atdmt.com/FRM/go/193102644/direct/01/">Par ici pour les inscriptions !</a> <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>N’oubliez pas de visiter le blog des Techdays : <a title="http://blogs.technet.com/mstechdays/" href="http://blogs.technet.com/mstechdays/">http://blogs.technet.com/mstechdays/</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dorianlamande.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dorianlamande.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dorianlamande.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dorianlamande.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dorianlamande.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dorianlamande.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dorianlamande.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dorianlamande.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dorianlamande.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dorianlamande.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dorianlamande.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dorianlamande.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dorianlamande.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dorianlamande.wordpress.com/189/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=189&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dorianlamande.wordpress.com/2009/12/20/techdays-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c45f6dc0ddf06234d1a231875ea50c0f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dorianlamande</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2009/12/sitelaunch.png" medium="image">
			<media:title type="html">sitelaunch</media:title>
		</media:content>
	</item>
		<item>
		<title>Office 2010 B&#234;ta disponible 2</title>
		<link>http://dorianlamande.wordpress.com/2009/11/19/office-2010-bta-disponible-2/</link>
		<comments>http://dorianlamande.wordpress.com/2009/11/19/office-2010-bta-disponible-2/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 10:49:36 +0000</pubDate>
		<dc:creator>Dorian LAMANDE</dc:creator>
				<category><![CDATA[Office 2010]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[Office]]></category>
		<category><![CDATA[Office2010]]></category>

		<guid isPermaLink="false">http://dorianlamande.wordpress.com/?p=182</guid>
		<description><![CDATA[&#160; Lors de la Professional Developer’s Conference, le 18 novembre à 18h heure française, Microsoft a annoncé la disponibilité publique d’Office 2010 et Office Web Apps, de SharePoint 2010, Visio 2010 et Project 2010 en version beta 2 ! Par ici ! www.microsoft.com/france/beta2010 Vous aurez le choix entre : - Office Famille et Petite Entrepreise [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=182&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p><a href="http://dorianlamande.files.wordpress.com/2009/11/image.png"><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="image" border="0" alt="image" src="http://dorianlamande.files.wordpress.com/2009/11/image_thumb.png?w=694&#038;h=84" width="694" height="84" /></a> </p>
<p>Lors de la Professional Developer’s Conference<b>, le 18 novembre à 18h heure française</b>, Microsoft a annoncé la disponibilité publique d’Office 2010 et Office Web Apps, de SharePoint 2010, Visio 2010 et Project 2010 en version beta 2 !</p>
<p>Par ici ! <a href="http://www.microsoft.com/france/beta2010">www.microsoft.com/france/beta2010</a></p>
</p>
<p>Vous aurez le choix entre :</p>
<p>- Office Famille et Petite Entrepreise 2010 : Word, Excel, PowerPoint, Outlook, One Note</p>
<p>- Office Professionnel 2010 : Word, Excel, PowerPoint, Outlook, One Note, Access, Publisher</p>
<p>- Office Professionnel Plus 2010 : Word, Excel, PowerPoint, Outlook, One Note, Access, Publisher, Infopath, Communicator, SharePoint WorkSpace</p>
<p>Les Office Web Apps restent en Technical Preview.</p>
<p>Pour les heureux possésseur d’un Windows Phone : vous pouvez télécharger la version bêta d’Office Mobile 2010 (Windows Mobile 6.5).</p>
<p><a title="http://marketplace.windowsphone.com/Default.aspx" href="http://marketplace.windowsphone.com/Default.aspx">http://marketplace.windowsphone.com/Default.aspx</a></p>
<p>A vos téléchargements ! <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dorianlamande.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dorianlamande.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dorianlamande.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dorianlamande.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dorianlamande.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dorianlamande.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dorianlamande.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dorianlamande.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dorianlamande.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dorianlamande.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dorianlamande.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dorianlamande.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dorianlamande.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dorianlamande.wordpress.com/182/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dorianlamande.wordpress.com&amp;blog=8276415&amp;post=182&amp;subd=dorianlamande&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dorianlamande.wordpress.com/2009/11/19/office-2010-bta-disponible-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c45f6dc0ddf06234d1a231875ea50c0f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dorianlamande</media:title>
		</media:content>

		<media:content url="http://dorianlamande.files.wordpress.com/2009/11/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
	</channel>
</rss>
