<?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/"
	>

<channel>
	<title>Eclipsed4utoo&#039;s Blog&#187; C#</title>
	<atom:link href="http://eclipsed4utoo.com/blog/tag/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://eclipsed4utoo.com/blog</link>
	<description>Not Your Ordinary Programmer</description>
	<lastBuildDate>Fri, 23 Jul 2010 18:10:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>WPF &#8211; Dynamically Loading LINQ-To-SQL Tables and Columns Into ComboBox</title>
		<link>http://eclipsed4utoo.com/blog/wpf-loading-linqtosql-tables-columns-combobox/</link>
		<comments>http://eclipsed4utoo.com/blog/wpf-loading-linqtosql-tables-columns-combobox/#comments</comments>
		<pubDate>Tue, 25 May 2010 22:00:21 +0000</pubDate>
		<dc:creator>Ryan Alford</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[LINQ-To-SQL]]></category>
		<category><![CDATA[wpf]]></category>

		<guid isPermaLink="false">http://eclipsed4utoo.com/blog/?p=338</guid>
		<description><![CDATA[Here is some code to dynamically load the table names into a ComboBox.  Then on the selection of a specific table, load the columns for that table into a second ComboBox.
First is the XAML:
&#60;Window x:Class="WpfApplication4.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        Title="MainWindow" Height="350" Width="525"&#62;    &#60;Grid&#62;        &#60;ComboBox [...]]]></description>
			<content:encoded><![CDATA[<p>Here is some code to dynamically load the table names into a ComboBox.  Then on the selection of a specific table, load the columns for that table into a second ComboBox.</p>
<p>First is the XAML:</p>
<pre style="font-size: 14px !important; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: monospace !important; overflow-x: scroll; overflow-y: scroll; max-height: 500px; width: 450px; display: block; background-position: initial initial; background-repeat: initial initial; padding: 12px; margin: 0px; border: 1px dotted #000000;"><span style="color: #000088; padding: 0px; margin: 0px;">&lt;Window</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #660066; padding: 0px; margin: 0px;">x:Class</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"WpfApplication4.MainWindow"</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #660066; padding: 0px; margin: 0px;">xmlns</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #660066; padding: 0px; margin: 0px;">xmlns:x</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"http://schemas.microsoft.com/winfx/2006/xaml"</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #660066; padding: 0px; margin: 0px;">Title</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"MainWindow"</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #660066; padding: 0px; margin: 0px;">Height</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"350"</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #660066; padding: 0px; margin: 0px;">Width</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"525"</span><span style="color: #000088; padding: 0px; margin: 0px;">&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #000088; padding: 0px; margin: 0px;">&lt;Grid&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #000088; padding: 0px; margin: 0px;">&lt;ComboBox</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Name</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"cboTables"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Height</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"23"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">HorizontalAlignment</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"Left"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Margin</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"186,60,0,0"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">VerticalAlignment</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"Top"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Width</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"120"</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">ItemsSource</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"{Binding}"</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Selectionchanged</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"cboTables_Selectionchanged"</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">DisplayMemberPath</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"RowType.Name"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">SelectedValuePath</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"RowType.DataMembers"</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #000088; padding: 0px; margin: 0px;">/&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        <br style="padding: 0px; margin: 0px;" />        </span><span style="color: #000088; padding: 0px; margin: 0px;">&lt;ComboBox</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Height</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"23"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">HorizontalAlignment</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"Left"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Margin</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"186,107,0,0"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Name</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"cboColumns"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">VerticalAlignment</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"Top"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Width</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"120"</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">ItemsSource</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"{Binding}"</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">DisplayMemberPath</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"MappedName"</span><span style="color: #000088; padding: 0px; margin: 0px;">/&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #000088; padding: 0px; margin: 0px;">&lt;Label</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Name</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"label1"</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Content</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"Tables:"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Height</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"28"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">HorizontalAlignment</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"Left"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Margin</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"134,60,0,0"</span><span style="color: #000000; padding: 0px; margin: 0px;">  <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">VerticalAlignment</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"Top"</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #000088; padding: 0px; margin: 0px;">/&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #000088; padding: 0px; margin: 0px;">&lt;Label</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Name</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"label2"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Content</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"Columns:"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Height</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"28"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">HorizontalAlignment</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"Left"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Margin</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"121,107,0,0"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">VerticalAlignment</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"Top"</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #000088; padding: 0px; margin: 0px;">/&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #000088; padding: 0px; margin: 0px;">&lt;/Grid&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #000088; padding: 0px; margin: 0px;">&lt;/Window&gt;</span></pre>
<p>Notice that we have set the <span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; font-family: monospace !important; background-position: initial initial; background-repeat: initial initial; padding: 2px; margin: 0px; border: 1px dotted #000000;">ItemsSource</span> attribute to <span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; font-family: monospace !important; background-position: initial initial; background-repeat: initial initial; padding: 2px; margin: 0px; border: 1px dotted #000000;">{Binding}</span>. This lets the control know that we are binding data to the control(big surprise). Notice that I have also set the<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; font-family: monospace !important; background-position: initial initial; background-repeat: initial initial; padding: 2px; margin: 0px; border: 1px dotted #000000;">DisplayMemberPath</span> and <span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; font-family: monospace !important; background-position: initial initial; background-repeat: initial initial; padding: 2px; margin: 0px; border: 1px dotted #000000;">SelectedValuePath</span> in the Tables ComboBox and the<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; font-family: monospace !important; background-position: initial initial; background-repeat: initial initial; padding: 2px; margin: 0px; border: 1px dotted #000000;">DisplayMemberPath</span> in the Columns ComboBox.</p>
<p>Next is the code:</p>
<pre style="font-size: 14px !important; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: monospace !important; overflow-x: scroll; overflow-y: scroll; max-height: 500px; width: 450px; display: block; background-position: initial initial; background-repeat: initial initial; padding: 12px; margin: 0px; border: 1px dotted #000000;"><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">System</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Collections</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">ObjectModel</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">System</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Windows</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">System</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Windows</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Controls</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" /></span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">namespace</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">WpfApplication4</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #008200; padding: 0px; margin: 0px;">/// &lt;summary&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #008200; padding: 0px; margin: 0px;">/// Interaction logic for Mainwindow.xaml</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #008200; padding: 0px; margin: 0px;">/// &lt;/summary&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">public</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">partial</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">class</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">MainWindow</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">:</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">Window</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">public</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">MainWindow</span><span style="color: #999900; padding: 0px; margin: 0px;">()</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #990099; padding: 0px; margin: 0px;">InitializeComponent</span><span style="color: #999900; padding: 0px; margin: 0px;">();</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">this</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Loaded</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">+=</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">new</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">RoutedEventHandler</span><span style="color: #999900; padding: 0px; margin: 0px;">(</span><span style="color: #990099; padding: 0px; margin: 0px;">MainWindow_Loaded</span><span style="color: #999900; padding: 0px; margin: 0px;">);</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #999900; padding: 0px; margin: 0px;">}</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">void</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">MainWindow_Loaded</span><span style="color: #999900; padding: 0px; margin: 0px;">(</span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">object</span><span style="color: #000000; padding: 0px; margin: 0px;"> sender</span><span style="color: #999900; padding: 0px; margin: 0px;">,</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">RoutedEventArgs</span><span style="color: #000000; padding: 0px; margin: 0px;"> e</span><span style="color: #999900; padding: 0px; margin: 0px;">)</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #008200; padding: 0px; margin: 0px;">// creates a new instance of our DataContext</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">(</span><span style="color: #990099; padding: 0px; margin: 0px;">InformationDataContext</span><span style="color: #000000; padding: 0px; margin: 0px;"> db </span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">new</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">InformationDataContext</span><span style="color: #999900; padding: 0px; margin: 0px;">())</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                </span><span style="color: #008200; padding: 0px; margin: 0px;">// gets the list of tables</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">var</span><span style="color: #000000; padding: 0px; margin: 0px;"> tableList </span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #000000; padding: 0px; margin: 0px;"> db</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Mapping</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">GetTables</span><span style="color: #999900; padding: 0px; margin: 0px;">();</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                cboTables</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">ItemsSource</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #000000; padding: 0px; margin: 0px;"> tableList</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #999900; padding: 0px; margin: 0px;">}</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #999900; padding: 0px; margin: 0px;">}</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">private</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">void</span><span style="color: #000000; padding: 0px; margin: 0px;"> cboTables_Selectionchanged</span><span style="color: #999900; padding: 0px; margin: 0px;">(</span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">object</span><span style="color: #000000; padding: 0px; margin: 0px;"> sender</span><span style="color: #999900; padding: 0px; margin: 0px;">,</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">SelectionchangedEventArgs</span><span style="color: #000000; padding: 0px; margin: 0px;"> e</span><span style="color: #999900; padding: 0px; margin: 0px;">)</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            cboColumns</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">ItemsSource</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #000000; padding: 0px; margin: 0px;"> cboTables</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">SelectedValue</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">as</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">ReadOnlyCollection</span><span style="color: #999900; padding: 0px; margin: 0px;">&lt;</span><span style="color: #990099; padding: 0px; margin: 0px;">System</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Data</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Linq</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Mapping</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">MetaDataMember</span><span style="color: #999900; padding: 0px; margin: 0px;">&gt;;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #999900; padding: 0px; margin: 0px;">}</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #999900; padding: 0px; margin: 0px;">}</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #999900; padding: 0px; margin: 0px;">}</span></pre>
<p>We use the <span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; font-family: monospace !important; background-position: initial initial; background-repeat: initial initial; padding: 2px; margin: 0px; border: 1px dotted #000000;">GetTables</span> method of the DataContext class to get the list of tables. The objects themselves are of type <span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; font-family: monospace !important; background-position: initial initial; background-repeat: initial initial; padding: 2px; margin: 0px; border: 1px dotted #000000;">System.Data.Linq.Mapping.AttributedMetaTable</span>. Two properties of this class are <span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; font-family: monospace !important; background-position: initial initial; background-repeat: initial initial; padding: 2px; margin: 0px; border: 1px dotted #000000;">RowType.Name</span> and <span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; font-family: monospace !important; background-position: initial initial; background-repeat: initial initial; padding: 2px; margin: 0px; border: 1px dotted #000000;">RowType.DataMembers</span>. The <span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; font-family: monospace !important; background-position: initial initial; background-repeat: initial initial; padding: 2px; margin: 0px; border: 1px dotted #000000;">RowType.Name</span> is the name of the table without the &#8220;dbo&#8221; in front. The <span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; font-family: monospace !important; background-position: initial initial; background-repeat: initial initial; padding: 2px; margin: 0px; border: 1px dotted #000000;">RowType.DataMembers</span> is a list of the columns of that table.<br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />The <span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; font-family: monospace !important; background-position: initial initial; background-repeat: initial initial; padding: 2px; margin: 0px; border: 1px dotted #000000;">RowType.DataMembers</span> objects are of type <span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; font-family: monospace !important; background-position: initial initial; background-repeat: initial initial; padding: 2px; margin: 0px; border: 1px dotted #000000;">System.Data.Linq.Mapping.MetaDataMember</span>. One property of this class is the <span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; font-family: monospace !important; background-position: initial initial; background-repeat: initial initial; padding: 2px; margin: 0px; border: 1px dotted #000000;">MappedName</span> property that we are using as the <span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; font-family: monospace !important; background-position: initial initial; background-repeat: initial initial; padding: 2px; margin: 0px; border: 1px dotted #000000;">DisplayMemberPath</span>. This gives us the name of the column without any extra data.</p>
]]></content:encoded>
			<wfw:commentRss>http://eclipsed4utoo.com/blog/wpf-loading-linqtosql-tables-columns-combobox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WPF &#8211; Create Animation Programmatically</title>
		<link>http://eclipsed4utoo.com/blog/wpf-create-animation-programmatically/</link>
		<comments>http://eclipsed4utoo.com/blog/wpf-create-animation-programmatically/#comments</comments>
		<pubDate>Thu, 20 May 2010 22:00:48 +0000</pubDate>
		<dc:creator>Ryan Alford</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[storyboard]]></category>
		<category><![CDATA[wpf]]></category>

		<guid isPermaLink="false">http://eclipsed4utoo.com/blog/?p=332</guid>
		<description><![CDATA[This is a short code snippet on creating an animation in WPF through code.
In my Twitter app that I have been working on, I was recently doing some optimizations.  When I first did the app, I was new to WPF and knew nothing about animations.  After spending time in Silverlight, I used that knowledge to [...]]]></description>
			<content:encoded><![CDATA[<p>This is a short code snippet on creating an animation in WPF through code.</p>
<p>In my <a href="http://eclipsed4utoo.com/blog/twiteclipse-twitter-desktop-client/" target="_blank">Twitter</a> app that I have been working on, I was recently doing some optimizations.  When I first did the app, I was new to WPF and knew nothing about animations.  After spending time in Silverlight, I used that knowledge to do some animations in WPF.</p>
<p>I wanted to do simple &#8220;fade-in&#8221; and &#8220;fade-out&#8221; animations when removing tweets from view and adding new tweets to the view.   And being the person that I am, I like doing this stuff in code.  While I like XAML a lot, I still like writing the code.  So here is how to do an animation that changes the Opacity property programmatically.</p>
<pre class="brush: csharp;">
// because I am doing these as extension methods, they
//   will be available to all UIElement objects, which are
//   basically all controls that can be added to the GUI
public static class ControlAnimationExtensionMethods
{
    public static void FadeIn(this UIElement targetControl)
    {
        DoubleAnimation fadeInAnimation = new DoubleAnimation(0, 1, new Duration(TimeSpan.FromSeconds(1.5)));
        Storyboard.SetTarget(fadeInAnimation, targetControl);
        Storyboard.SetTargetProperty(fadeInAnimation, new PropertyPath(UIElement.OpacityProperty));
        Storyboard sb = new Storyboard();
        sb.Children.Add(fadeInAnimation);
        sb.Begin();
    }

    public static void FadeOut(this UIElement targetControl)
    {
        DoubleAnimation fadeInAnimation = new DoubleAnimation(1, 0, new Duration(TimeSpan.FromSeconds(1.5)));
        Storyboard.SetTarget(fadeInAnimation, targetControl);
        Storyboard.SetTargetProperty(fadeInAnimation, new PropertyPath(UIElement.OpacityProperty));
        Storyboard sb = new Storyboard();
        sb.Children.Add(fadeInAnimation);
        sb.Begin();
    }
}
</pre>
<p>This code is useful when dynamically creating controls that you want to do animations on.</p>
<pre class="brush: csharp;">
TextBlock tb = new TextBlock();
tb.Name = &quot;textBlock1&quot;;
// set more property values

tb.FadeIn();
</pre>
]]></content:encoded>
			<wfw:commentRss>http://eclipsed4utoo.com/blog/wpf-create-animation-programmatically/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Silverlight 4 &#8211; Connecting To Remote Database With WCF</title>
		<link>http://eclipsed4utoo.com/blog/silverlight-connecting-remote-database-wcf/</link>
		<comments>http://eclipsed4utoo.com/blog/silverlight-connecting-remote-database-wcf/#comments</comments>
		<pubDate>Fri, 14 May 2010 22:00:36 +0000</pubDate>
		<dc:creator>Ryan Alford</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Silverlight 4]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://eclipsed4utoo.com/blog/?p=314</guid>
		<description><![CDATA[This tutorial will show how to connect to a database that is located on the deploy server from a Silverlight application.
I will be using Visual Studio 2010 and Silverlight 4.
So first, we will create a Silverlight 4 application.


Next, we are just going to put a DataGrid on our MainPage.xaml.

&#60;UserControl x:Class="SilverlightWCFTutorial.MainPage"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    [...]]]></description>
			<content:encoded><![CDATA[<p>This tutorial will show how to connect to a database that is located on the deploy server from a Silverlight application.</p>
<p>I will be using Visual Studio 2010 and Silverlight 4.</p>
<p>So first, we will create a Silverlight 4 application.</p>
<p><img class="alignnone size-full wp-image-316" title="Thumb1" src="http://eclipsed4utoo.com/blog/wp-content/uploads/2010/05/Thumb1.png" alt="Thumb1" width="200" height="116" /></p>
<p><img class="alignnone size-full wp-image-318" title="Image2" src="http://eclipsed4utoo.com/blog/wp-content/uploads/2010/05/Image21.PNG" alt="Image2" width="218" height="175" /></p>
<p>Next, we are just going to put a DataGrid on our MainPage.xaml.</p>
<pre><span style="font-family: Verdana, sans-serif; line-height: 21px; font-size: 14px; border-collapse: collapse; color: #222222;">
<pre style="font-size: 14px !important; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: monospace !important; overflow-x: scroll; overflow-y: scroll; max-height: 500px; width: 450px; display: block; background-position: initial initial; background-repeat: initial initial; padding: 12px; margin: 0px; border: 1px dotted #000000;"><span style="color: #000088; padding: 0px; margin: 0px;">&lt;UserControl</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #660066; padding: 0px; margin: 0px;">x:Class</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"SilverlightWCFTutorial.MainPage"</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #660066; padding: 0px; margin: 0px;">xmlns</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #660066; padding: 0px; margin: 0px;">xmlns:x</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"http://schemas.microsoft.com/winfx/2006/xaml"</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #660066; padding: 0px; margin: 0px;">xmlns:d</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"http://schemas.microsoft.com/exp</span><strong> </strong><span style="color: #008800; padding: 0px; margin: 0px;">ression/blend/2008"</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #660066; padding: 0px; margin: 0px;">xmlns:mc</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"http://schemas.openxmlformats.org/markup-compatibility/2006"</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #660066; padding: 0px; margin: 0px;">mc:Ignorable</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"d"</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #660066; padding: 0px; margin: 0px;">d:DesignHeight</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"300"</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #660066; padding: 0px; margin: 0px;">d:DesignWidth</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"400"</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #660066; padding: 0px; margin: 0px;">xmlns:sdk</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"</span><span style="color: #000088; padding: 0px; margin: 0px;">&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #000088; padding: 0px; margin: 0px;">&lt;Grid</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #660066; padding: 0px; margin: 0px;">x:Name</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"LayoutRoot"</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #660066; padding: 0px; margin: 0px;">Background</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"White"</span><span style="color: #000088; padding: 0px; margin: 0px;">&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #000088; padding: 0px; margin: 0px;">&lt;sdk:DataGrid</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Name</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"dataGridPerson"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">AutoGenerateColumns</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"True"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Height</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"206"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">HorizontalAlignment</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"Left"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Margin</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"12,44,0,0"</span><span style="color: #000000; padding: 0px; margin: 0px;">  <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">VerticalAlignment</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"Top"</span><span style="color: #000000; padding: 0px; margin: 0px;"> <br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">Width</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"376"</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #660066; padding: 0px; margin: 0px;">ItemsSource</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #008800; padding: 0px; margin: 0px;">"{Binding}"</span><span style="color: #000088; padding: 0px; margin: 0px;">&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #000088; padding: 0px; margin: 0px;">&lt;/sdk:DataGrid&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #000088; padding: 0px; margin: 0px;">&lt;/Grid&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #000088; padding: 0px; margin: 0px;">&lt;/UserControl&gt;</span></pre>
<p></span></pre>
<p>So for the Grid, we are simply going to show a list of names that are in a database table.  I have a database table setup as:</p>
<p>Table Name:   Person</p>
<p>Columns:<br />
ID<br />
FirstName<br />
LastName<br />
Age</p>
<p>I am going to concatenate the First Name and Last Name, then bind that to the grid.</p>
<p>Now that we have our Silverlight application ready, we will add a WCF service to our existing &#8220;SilverlightWCFTutorial.Web&#8221; project that was automatically created for us.</p>
<p><img class="alignnone size-full wp-image-320" title="Image3" src="http://eclipsed4utoo.com/blog/wp-content/uploads/2010/05/Image3.PNG" alt="Image3" width="479" height="269" /></p>
<p>Now we are going to setup the interface that was created for us.  The interface automatically creates a method called &#8220;DoWork&#8221;.  We are going to change the name of this to be a little more specific.  I gave the method the name of &#8220;GetNames&#8221;.</p>
<p><span style="font-family: Verdana, sans-serif; line-height: 21px; font-size: 14px; border-collapse: collapse; color: #222222;"> </span></p>
<pre style="font-size: 14px !important; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: monospace !important; overflow-x: scroll; overflow-y: scroll; max-height: 500px; width: 450px; display: block; background-position: initial initial; background-repeat: initial initial; padding: 12px; margin: 0px; border: 1px dotted #000000;"><span style="color: #999900; padding: 0px; margin: 0px;">[</span><span style="color: #990099; padding: 0px; margin: 0px;">ServiceContract</span><span style="color: #999900; padding: 0px; margin: 0px;">]</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">public</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">interface</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">IDatabaseService</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #999900; padding: 0px; margin: 0px;">[</span><span style="color: #990099; padding: 0px; margin: 0px;">OperationContract</span><span style="color: #999900; padding: 0px; margin: 0px;">]</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #990099; padding: 0px; margin: 0px;">List</span><span style="color: #646464; padding: 0px; margin: 0px;">&lt;string&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">GetNames</span><span style="color: #999900; padding: 0px; margin: 0px;">();</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #999900; padding: 0px; margin: 0px;">}</span></pre>
<p>Now that the interface is finished, we will move to the service file.  Double-click on the &#8220;DatabaseService.svc&#8221; file to get to the code.  This code is just going to run some simple ADO to get the data from the database.</p>
<p><span style="font-family: Verdana, sans-serif; line-height: 21px; font-size: 14px; border-collapse: collapse; color: #222222;"> </span></p>
<pre style="font-size: 14px !important; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: monospace !important; overflow-x: scroll; overflow-y: scroll; max-height: 500px; width: 450px; display: block; background-position: initial initial; background-repeat: initial initial; padding: 12px; margin: 0px; border: 1px dotted #000000;"><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">System</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">System</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Collections</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Generic</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">System</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Linq</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">System</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Runtime</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Serialization</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">System</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">ServiceModel</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">System</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Text</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">System</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Data</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">SqlClient</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">System</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Data</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" /></span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">namespace</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">SilverlightWcfService</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #008200; padding: 0px; margin: 0px;">// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "DatabaseService" in code, svc and config file together.</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">public</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">class</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">DatabaseService</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">:</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">IDatabaseService</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">string</span><span style="color: #000000; padding: 0px; margin: 0px;"> myConnectionString </span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #646464; padding: 0px; margin: 0px;">"someConnectionString"</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">public</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">List</span><span style="color: #646464; padding: 0px; margin: 0px;">&lt;string&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">GetNames</span><span style="color: #999900; padding: 0px; margin: 0px;">()</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #990099; padding: 0px; margin: 0px;">List</span><span style="color: #646464; padding: 0px; margin: 0px;">&lt;string&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"> list </span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">new</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">List</span><span style="color: #646464; padding: 0px; margin: 0px;">&lt;string&gt;</span><span style="color: #999900; padding: 0px; margin: 0px;">();</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">(</span><span style="color: #990099; padding: 0px; margin: 0px;">SqlConnection</span><span style="color: #000000; padding: 0px; margin: 0px;"> cn </span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">new</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">SqlConnection</span><span style="color: #999900; padding: 0px; margin: 0px;">(</span><span style="color: #000000; padding: 0px; margin: 0px;">myConnectionString</span><span style="color: #999900; padding: 0px; margin: 0px;">))</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">(</span><span style="color: #990099; padding: 0px; margin: 0px;">SqlCommand</span><span style="color: #000000; padding: 0px; margin: 0px;"> cmd </span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #000000; padding: 0px; margin: 0px;"> cn</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">CreateCommand</span><span style="color: #999900; padding: 0px; margin: 0px;">())</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                </span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                    cmd</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">CommandText</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #646464; padding: 0px; margin: 0px;">"SELECT FirstName + ' ' + LastName FROM Person"</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                    cmd</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">CommandType</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">CommandType</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Text</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />                    cn</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Open</span><span style="color: #999900; padding: 0px; margin: 0px;">();</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />                    </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">(</span><span style="color: #990099; padding: 0px; margin: 0px;">SqlDataReader</span><span style="color: #000000; padding: 0px; margin: 0px;"> dr </span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #000000; padding: 0px; margin: 0px;"> cmd</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">ExecuteReader</span><span style="color: #999900; padding: 0px; margin: 0px;">())</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                    </span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                        </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">while</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">(</span><span style="color: #000000; padding: 0px; margin: 0px;">dr</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Read</span><span style="color: #999900; padding: 0px; margin: 0px;">())</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                        </span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                            list</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Add</span><span style="color: #999900; padding: 0px; margin: 0px;">(</span><span style="color: #000000; padding: 0px; margin: 0px;">dr</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">GetString</span><span style="color: #999900; padding: 0px; margin: 0px;">(</span><span style="color: #006666; padding: 0px; margin: 0px;">0</span><span style="color: #999900; padding: 0px; margin: 0px;">));</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                        </span><span style="color: #999900; padding: 0px; margin: 0px;">}</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                    </span><span style="color: #999900; padding: 0px; margin: 0px;">}</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                </span><span style="color: #999900; padding: 0px; margin: 0px;">}</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #999900; padding: 0px; margin: 0px;">}</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">return</span><span style="color: #000000; padding: 0px; margin: 0px;"> list</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #999900; padding: 0px; margin: 0px;">}</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #999900; padding: 0px; margin: 0px;">}</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #999900; padding: 0px; margin: 0px;">}</span></pre>
<p>Next, we will need to fix the &#8220;Markup&#8221; of the &#8220;DatabaseService.svc&#8221; file.   Right-click on the file, then choose &#8220;View Markup&#8221;.  In the markup, you will notice a &#8220;Service&#8221; attribute.  This should be in the format of &#8220;Namespace.ServiceName&#8221;.  In our case, the autogenerated value could be incorrect.  Change the code to this..</p>
<p><span style="font-family: Verdana, sans-serif; line-height: 21px; font-size: 14px; border-collapse: collapse; color: #222222;"> </span></p>
<pre style="font-size: 14px !important; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: monospace !important; overflow-x: scroll; overflow-y: scroll; max-height: 500px; width: 450px; display: block; background-position: initial initial; background-repeat: initial initial; padding: 12px; margin: 0px; border: 1px dotted #000000;"><span style="color: #999900; padding: 0px; margin: 0px;">&lt;%@</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">ServiceHost</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">Language</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #646464; padding: 0px; margin: 0px;">"C#"</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">Debug</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #646464; padding: 0px; margin: 0px;">"true"</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">Service</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #646464; padding: 0px; margin: 0px;">"SilverlightWCFTutorial.Web.DatabaseService"</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">CodeBehind</span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #646464; padding: 0px; margin: 0px;">"DatabaseService.svc.cs"</span><span style="color: #000000; padding: 0px; margin: 0px;"> %&gt;</span></pre>
<p>Now that our WCF service is complete, we are going back to the Silverlight app.  We are going to add an event handler for the &#8220;Loaded&#8221; event of the MainPage.xaml.</p>
<p><span style="font-family: Verdana, sans-serif; line-height: 21px; font-size: 14px; border-collapse: collapse; color: #222222;"> </span></p>
<pre style="font-size: 14px !important; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: monospace !important; overflow-x: scroll; overflow-y: scroll; max-height: 500px; width: 450px; display: block; background-position: initial initial; background-repeat: initial initial; padding: 12px; margin: 0px; border: 1px dotted #000000;"><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">public</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">MainPage</span><span style="color: #999900; padding: 0px; margin: 0px;">()</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #990099; padding: 0px; margin: 0px;">InitializeComponent</span><span style="color: #999900; padding: 0px; margin: 0px;">();</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">this</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Loaded</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">+=</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">new</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">RoutedEventHandler</span><span style="color: #999900; padding: 0px; margin: 0px;">(</span><span style="color: #990099; padding: 0px; margin: 0px;">MainPage_Loaded</span><span style="color: #999900; padding: 0px; margin: 0px;">);</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #999900; padding: 0px; margin: 0px;">}</span></pre>
<p>You will need to rebuild your solution at this point.</p>
<p>We will also need to add a Reference to the Service for our Silverlight project.  Right-click on the &#8220;SilverlightWCFTutorial&#8221; project, and choose &#8220;Add Service Reference&#8230;&#8221;.  Once the Add Service Reference window comes up, click the &#8220;Discover&#8221; button.  This will find our service.  Fill in the &#8220;Namespace&#8221;(called mine &#8220;MyDatabaseService&#8221;).  Then click OK.</p>
<p><img class="alignnone size-full wp-image-322" title="Image4" src="http://eclipsed4utoo.com/blog/wp-content/uploads/2010/05/Image4.PNG" alt="Image4" width="377" height="304" /></p>
<p>Now we are ready to do some code.  Remember that the requests in Silverlight are made asynchronously.</p>
<p>In our &#8220;MainPage_Loaded&#8217; event handler, we will have this code..</p>
<p><span style="font-family: Verdana, sans-serif; line-height: 21px; font-size: 14px; border-collapse: collapse; color: #222222;"> </span></p>
<pre style="font-size: 14px !important; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: monospace !important; overflow-x: scroll; overflow-y: scroll; max-height: 500px; width: 450px; display: block; background-position: initial initial; background-repeat: initial initial; padding: 12px; margin: 0px; border: 1px dotted #000000;"><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">void</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">MainPage_Loaded</span><span style="color: #999900; padding: 0px; margin: 0px;">(</span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">object</span><span style="color: #000000; padding: 0px; margin: 0px;"> sender</span><span style="color: #999900; padding: 0px; margin: 0px;">,</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">RoutedEventArgs</span><span style="color: #000000; padding: 0px; margin: 0px;"> e</span><span style="color: #999900; padding: 0px; margin: 0px;">)</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #008200; padding: 0px; margin: 0px;">// The DatabaseServiceClient class was automatically created for us.</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #008200; padding: 0px; margin: 0px;">// The autogeneration takes the name of the service, then appends "Client" to it,</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #008200; padding: 0px; margin: 0px;">//   giving us the "DatabaseServiceClient" class.</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #990099; padding: 0px; margin: 0px;">DatabaseServiceClient</span><span style="color: #000000; padding: 0px; margin: 0px;"> client </span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">new</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">DatabaseServiceClient</span><span style="color: #999900; padding: 0px; margin: 0px;">();</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #008200; padding: 0px; margin: 0px;">// Since requests in Silverlight are asynchronous, we have a Completed method</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #008200; padding: 0px; margin: 0px;">//   that will be fired when the request has been completed.</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    client</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">GetNamesCompleted</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">+=</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">delegate</span><span style="color: #999900; padding: 0px; margin: 0px;">(</span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">object</span><span style="color: #000000; padding: 0px; margin: 0px;"> s</span><span style="color: #999900; padding: 0px; margin: 0px;">,</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">GetNamesCompletedEventArgs</span><span style="color: #000000; padding: 0px; margin: 0px;"> es</span><span style="color: #999900; padding: 0px; margin: 0px;">)</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #008200; padding: 0px; margin: 0px;">// when the request has been completed, we want to bind the data to the grid.</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #008200; padding: 0px; margin: 0px;">// the Result property of the EventArgs contains the returned data.</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #008200; padding: 0px; margin: 0px;">// ObservableCollection is a common collection that is used when databinding to</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #008200; padding: 0px; margin: 0px;">//    a DataGrid.</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #990099; padding: 0px; margin: 0px;">ObservableCollection</span><span style="color: #646464; padding: 0px; margin: 0px;">&lt;string&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"> myList </span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #000000; padding: 0px; margin: 0px;"> es</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Result</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />        dataGridPerson</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">DataContext</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #000000; padding: 0px; margin: 0px;"> myList</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #999900; padding: 0px; margin: 0px;">};</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />    client</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">GetNamesAsync</span><span style="color: #999900; padding: 0px; margin: 0px;">();</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #999900; padding: 0px; margin: 0px;">}</span></pre>
<p>And that&#8217;s it.  We now run the Silverlight app, and we get this&#8230;</p>
<p><img class="alignnone size-full wp-image-323" title="Image5" src="http://eclipsed4utoo.com/blog/wp-content/uploads/2010/05/Image5.PNG" alt="Image5" width="303" height="193" /></p>
<p>Here is the full code of the MainPage.xaml&#8230;</p>
<p><span style="font-family: Verdana, sans-serif; line-height: 21px; font-size: 14px; border-collapse: collapse; color: #222222;"> </span></p>
<pre style="font-size: 14px !important; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; font-family: monospace !important; overflow-x: scroll; overflow-y: scroll; max-height: 500px; width: 450px; display: block; background-position: initial initial; background-repeat: initial initial; padding: 12px; margin: 0px; border: 1px dotted #000000;"><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">System</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Collections</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">ObjectModel</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">System</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Windows</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">System</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Windows</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Controls</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">using</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">SilverlightWCFTutorial</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">MyDatabaseService</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" /></span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">namespace</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">SilverlightWCFTutorial</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">public</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">partial</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">class</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">MainPage</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">:</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">UserControl</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">public</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">MainPage</span><span style="color: #999900; padding: 0px; margin: 0px;">()</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #990099; padding: 0px; margin: 0px;">InitializeComponent</span><span style="color: #999900; padding: 0px; margin: 0px;">();</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">this</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Loaded</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">+=</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">new</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">RoutedEventHandler</span><span style="color: #999900; padding: 0px; margin: 0px;">(</span><span style="color: #990099; padding: 0px; margin: 0px;">MainPage_Loaded</span><span style="color: #999900; padding: 0px; margin: 0px;">);</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #999900; padding: 0px; margin: 0px;">}</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">void</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">MainPage_Loaded</span><span style="color: #999900; padding: 0px; margin: 0px;">(</span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">object</span><span style="color: #000000; padding: 0px; margin: 0px;"> sender</span><span style="color: #999900; padding: 0px; margin: 0px;">,</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">RoutedEventArgs</span><span style="color: #000000; padding: 0px; margin: 0px;"> e</span><span style="color: #999900; padding: 0px; margin: 0px;">)</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #008200; padding: 0px; margin: 0px;">// The DatabaseServiceClient class was automatically created for us.</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #008200; padding: 0px; margin: 0px;">// The autogeneration takes the name of the service, then appends "Client" to it,</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #008200; padding: 0px; margin: 0px;">//   giving us the "DatabaseServiceClient" class.</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #990099; padding: 0px; margin: 0px;">DatabaseServiceClient</span><span style="color: #000000; padding: 0px; margin: 0px;"> client </span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">new</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">DatabaseServiceClient</span><span style="color: #999900; padding: 0px; margin: 0px;">();</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #008200; padding: 0px; margin: 0px;">// Since requests in Silverlight are asynchronous, we have a Completed method</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #008200; padding: 0px; margin: 0px;">//   that will be fired when the request has been completed.</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            client</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">GetNamesCompleted</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">+=</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">delegate</span><span style="color: #999900; padding: 0px; margin: 0px;">(</span><span style="color: #006699; font-weight: bold; padding: 0px; margin: 0px;">object</span><span style="color: #000000; padding: 0px; margin: 0px;"> s</span><span style="color: #999900; padding: 0px; margin: 0px;">,</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #990099; padding: 0px; margin: 0px;">GetNamesCompletedEventArgs</span><span style="color: #000000; padding: 0px; margin: 0px;"> es</span><span style="color: #999900; padding: 0px; margin: 0px;">)</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #999900; padding: 0px; margin: 0px;">{</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                </span><span style="color: #008200; padding: 0px; margin: 0px;">// when the request has been completed, we want to bind the data to the grid.</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                </span><span style="color: #008200; padding: 0px; margin: 0px;">// the Result property of the EventArgs contains the returned data.</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                </span><span style="color: #008200; padding: 0px; margin: 0px;">// ObservableCollection is a common collection that is used when databinding to</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                </span><span style="color: #008200; padding: 0px; margin: 0px;">//    a DataGrid.</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />                </span><span style="color: #990099; padding: 0px; margin: 0px;">ObservableCollection</span><span style="color: #646464; padding: 0px; margin: 0px;">&lt;string&gt;</span><span style="color: #000000; padding: 0px; margin: 0px;"> myList </span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #000000; padding: 0px; margin: 0px;"> es</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">Result</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />                dataGridPerson</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">DataContext</span><span style="color: #000000; padding: 0px; margin: 0px;"> </span><span style="color: #999900; padding: 0px; margin: 0px;">=</span><span style="color: #000000; padding: 0px; margin: 0px;"> myList</span><span style="color: #999900; padding: 0px; margin: 0px;">;</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />            </span><span style="color: #999900; padding: 0px; margin: 0px;">};</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /><br style="padding: 0px; margin: 0px;" />            client</span><span style="color: #999900; padding: 0px; margin: 0px;">.</span><span style="color: #990099; padding: 0px; margin: 0px;">GetNamesAsync</span><span style="color: #999900; padding: 0px; margin: 0px;">();</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />        </span><span style="color: #999900; padding: 0px; margin: 0px;">}</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" />    </span><span style="color: #999900; padding: 0px; margin: 0px;">}</span><span style="color: #000000; padding: 0px; margin: 0px;"><br style="padding: 0px; margin: 0px;" /></span><span style="color: #999900; padding: 0px; margin: 0px;">}</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://eclipsed4utoo.com/blog/silverlight-connecting-remote-database-wcf/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using SqlDependency To Monitor SQL Database Changes</title>
		<link>http://eclipsed4utoo.com/blog/sqldependency-monitor-sql-database/</link>
		<comments>http://eclipsed4utoo.com/blog/sqldependency-monitor-sql-database/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 22:00:34 +0000</pubDate>
		<dc:creator>Ryan Alford</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SqlDependency]]></category>

		<guid isPermaLink="false">http://eclipsed4utoo.com/blog/?p=299</guid>
		<description><![CDATA[In this tutorial, I will use the SqlDependency class and Query notifications to monitor SQL Server 2005 database data changes. Query Notifications allow an application to be notified when data has changed in the database.
The purpose of this class is to save you from having to continuously re-query the database to get new data. You [...]]]></description>
			<content:encoded><![CDATA[<p>In this tutorial, I will use the SqlDependency class and Query notifications to monitor SQL Server 2005 database data changes. Query Notifications allow an application to be notified when data has changed in the database.</p>
<p>The purpose of this class is to save you from having to continuously re-query the database to get new data. You would have probably done this by setting up a timer that executes every X amount of seconds so that your display control would be displaying the most up-to-date information. You will no longer have to do this.</p>
<p>We will be using a Service Broker and a QUEUE in SQL Server 2005. These were new additions to SQL Server 2005. I will assume these are also in SQL Server 2008, but can&#8217;t guarantee.</p>
<p>My example will be doing something very simple. I have a &#8220;Users&#8221; table in my database with two fields: FirstName and LastName. I am simply displaying these in a ListBox on one form. On a second form, I have textboxes to insert the data into the database.</p>
<p>So first, we need to create the Queue and the Service broker and assign the privileges to the SQL user.</p>
<pre class="brush: sql;">
USING [YourDatabaseName]

CREATE QUEUE NameChangeQueue;
CREATE SERVICE NameChangeService ON QUEUE NameChangeQueue
([http://schemas.microsoft.com/sql/notifications/postquerynotification]);

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO YourUserName;
</pre>
<p>You can now see that we have a new queue and a new service.</p>
<p><img class="alignnone size-full wp-image-300" title="Database" src="http://eclipsed4utoo.com/blog/wp-content/uploads/2010/02/Database.png" alt="Database" width="374" height="373" /></p>
<p>Now we move on to the code. The first thing you will need to do is to test if the connecting user has the privileges for the query notifications.</p>
<pre class="brush: csharp;">
private bool DoesUserHavePermission()
{
     try
     {
           SqlClientPermission clientPermission = new SqlClientPermission(PermissionState.Unrestricted);

           // will throw an error if user does not have permissions
           clientPermission.Demand();

           return true;
     }
     catch
     {
           return false;
     }
}
</pre>
<p>Next, we have our method to get the user names from the database.</p>
<pre class="brush: csharp;">
private void GetNames()
{
    if (!DoesUserHavePermission())
        return;

    lbNames.Items.Clear();

    SqlDependency.Stop(connectionString);
    SqlDependency.Start(connectionString);

    using (SqlConnection cn = new SqlConnection(connectionString))
    {
        using (SqlCommand cmd = cn.CreateCommand())
        {
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = &quot;SELECT FirstName, LastName FROM dbo.[Users]&quot;;

            cmd.Notification = null;

            SqlDependency dep = new SqlDependency(cmd);
            dep.OnChange += new OnChangeEventHandler(dep_OnChange);

            cn.Open();

            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                while (dr.Read())
                {
                    lbNames.Items.Add(dr.GetString(0) + &quot; &quot; + dr.GetString(1));
                }
            }
        }
    }
}
</pre>
<p><span style="color: #ff0000;"><strong>THIS IS VERY IMPORTANT.</strong></span></p>
<p><span style="color: #ff0000;">1. In the previous code, you will notice that my SQL query does not use the &#8220;*&#8221; wildcard to return all columns. You MUST return the exact columns that you want. If you use the &#8220;*&#8221;, it will cause you to have unwanted consequences.<br />
</span></p>
<p><span style="color: #ff0000;">2. Also in the previous code, you will notice that my SQL query contains the &#8220;two-part&#8221; table name. This is also REQUIRED. Using just &#8220;TableName&#8221; instead of &#8220;owner.TableName&#8221; will also cause unwanted consequences.</span></p>
<p>Here is the method for the <strong>OnChange </strong>event</p>
<pre class="brush: csharp;">
void dep_OnChange(object sender, SqlNotificationEventArgs e)
{
    // this event is run asynchronously so you will need to invoke to run on UI thread.
    if (this.InvokeRequired)
        lbNames.BeginInvoke(new MethodInvoker(GetNames));
    else
        GetNames();

    // this will remove the event handler since the dependency is only for a single notification
    SqlDependency dep = sender as SqlDependency;
    dep.OnChange -= new OnChangeEventHandler(dep_OnChange);
}
</pre>
<p>You will also need to stop the dependency when the form closes so that it doesn&#8217;t leave it running.</p>
<pre class="brush: csharp;">
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    SqlDependency.Stop(connectionString);
}
</pre>
<p>The other events&#8230;</p>
<pre class="brush: csharp;">
private void Form1_Load(object sender, EventArgs e)
{
    GetNames();
}

private void btnShowForm_Click(object sender, EventArgs e)
{
    Form2 f = new Form2();
    f.Show();
}
</pre>
<p>And my simple second form&#8217;s code..</p>
<pre class="brush: csharp;">
private void btnSave_Click(object sender, EventArgs e)
{
    using (SqlConnection cn = new SqlConnection(&quot;Data Source=alfordr;Initial Catalog=MyTestDatabase;User Id=dev;Password=dev;&quot;))
    {
        using (SqlCommand cmd = cn.CreateCommand())
        {
            cmd.CommandText = &quot;INSERT INTO Users VALUES (@FirstName, @LastName)&quot;;
            cmd.CommandType = CommandType.Text;

            cmd.Parameters.AddWithValue(&quot;@FirstName&quot;, txtFirstName.Text);
            cmd.Parameters.AddWithValue(&quot;@LastName&quot;, txtLastName.Text);

            cn.Open();

            cmd.ExecuteNonQuery();
        }
    }
}
</pre>
<p>And that is really all you have to do. Here are a couple of screenshots.</p>
<p>Before clicking &#8220;Save&#8221;&#8230;<br />
<img class="alignnone size-full wp-image-307" title="BeforeSave" src="http://eclipsed4utoo.com/blog/wp-content/uploads/2010/02/BeforeSave.png" alt="BeforeSave" width="657" height="367" /><br />
After clicking &#8220;Save&#8221;&#8230;..<br />
<img class="alignnone size-full wp-image-308" title="AfterSave" src="http://eclipsed4utoo.com/blog/wp-content/uploads/2010/02/AfterSave.png" alt="AfterSave" width="657" height="364" /></p>
<p>As you can see from my code, I am simply inserting data into my database when the<strong> Save</strong> button is clicked.  When the data is inserted, a notification is sent to the application, which is handled by the <strong>OnChange </strong>event.  The OnChange event then invokes the <strong>GetNames </strong>method which re-queries the database to get the new information.  This makes a huge performance improvement because I ONLY query when I need to.</p>
<p>This works for inserts, updates, and deletes.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;"><span class="Apple-style-span" style="border-collapse: separate; color: #000000; font-family: Arial,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;"><span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: Verdana,sans-serif; font-size: 14px; line-height: 21px;">In this tutorial, I will use the SqlDependency class and Query notifications to monitor SQL Server 2005 database data changes. Query Notifications allow an application to be notified when data has changed in the database.<span class="Apple-converted-space"> </span><br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" />The purpose of this class is to save you from having to continuously re-query the database to get new data. You would have probably done this by setting up a timer that executes every X amount of seconds so that your display control would be displaying the most up-to-date information. You will no longer have to do this.<br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" />We will be using a Service Broker and a QUEUE in SQL Server 2005. These were new additions to SQL Server 2005. I will assume these are also in SQL Server 2008, but can&#8217;t guarantee.<br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" />My example will be doing something very simple. I have a &#8220;Users&#8221; table in my database with two fields: FirstName and LastName. I am simply displaying these in a ListBox on one form. On a second form, I have textboxes to insert the data into the database.<br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" />So first, we need to create the Queue and the Service broker and assign the privileges to the SQL user.</span></span><span style="border-collapse: separate; color: #000000; font-family: Arial,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;"><span style="border-collapse: collapse; color: #222222; font-family: Verdana,sans-serif; font-size: 14px; line-height: 21px;">In this tutorial, I will use the SqlDependency class and Query notifications to monitor SQL Server 2005 database data changes. Query Notifications allow an application to be notified when data has changed in the database. <br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" />The purpose of this class is to save you from having to continuously re-query the database to get new data. You would have probably done this by setting up a timer that executes every X amount of seconds so that your display control would be displaying the most up-to-date information. You will no longer have to do this.<br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" />We will be using a Service Broker and a QUEUE in SQL Server 2005. These were new additions to SQL Server 2005. I will assume these are also in SQL Server 2008, but can&#8217;t guarantee.<br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" />My example will be doing something very simple. I have a &#8220;Users&#8221; table in my database with two fields: FirstName and LastName. I am simply displaying these in a ListBox on one form. On a second form, I have textboxes to insert the data into the database.<br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" />So first, we need to create the Queue and the Service broker and assign the privileges to the SQL user.</span></span></div>
]]></content:encoded>
			<wfw:commentRss>http://eclipsed4utoo.com/blog/sqldependency-monitor-sql-database/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WPF &#8211; Using an Application Configuration File</title>
		<link>http://eclipsed4utoo.com/blog/wpf-application-configuration-file/</link>
		<comments>http://eclipsed4utoo.com/blog/wpf-application-configuration-file/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 19:16:01 +0000</pubDate>
		<dc:creator>Ryan Alford</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[app.config]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[ConfigurationManager]]></category>
		<category><![CDATA[wpf]]></category>

		<guid isPermaLink="false">http://eclipsed4utoo.com/blog/?p=292</guid>
		<description><![CDATA[This is going to be a real short post about an issue that I ran into recently with WPF.
I was wanting to use an app config file with my WPF application.  I was running into an issue with the ConfigurationManager calls not getting the information from the app config file.
I added the app config just [...]]]></description>
			<content:encoded><![CDATA[<p>This is going to be a real short post about an issue that I ran into recently with WPF.</p>
<p>I was wanting to use an app config file with my WPF application.  I was running into an issue with the ConfigurationManager calls not getting the information from the app config file.</p>
<p>I added the app config just like I would in a Windows Form..<br />
<img class="alignnone size-full wp-image-293" title="AppConfig" src="http://eclipsed4utoo.com/blog/wp-content/uploads/2010/02/AppConfig.png" alt="AppConfig" width="679" height="418" /></p>
<p>My app config file looked something like this&#8230;</p>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;configuration&gt;
  &lt;appSettings&gt;
     &lt;add key=&quot;myKey&quot; value=&quot;SomeValue&quot; /&gt;
  &lt;/appSettings&gt;
&lt;/configuration&gt;
</pre>
<p>I was using the standard code that works fine in Windows Forms(needed to add a reference to the System.Configuration):</p>
<pre class="brush: csharp;">
using System.Configuration

private void Window_Loaded(object sender, RoutedEventArgs e)
{
     var myKey = ConfigurationManager.AppSettings[&quot;myKey&quot;];
}
</pre>
<p>However, the app settings were not being found.  After scratching my head for a while and searching numerous places online, I found a small response on a forum.  None of the &#8220;MVP&#8221;s picked up on it.  It was because of the name of the app config file.  By default, VS2008 added the file as &#8220;App1.config&#8221;.  For some reason, the ConfigurationManager class looks for a file named exactly &#8220;App.config&#8221;.</p>
<p>So simply changing the name of the config file to &#8220;App.config&#8221; fixed the issue and the code started working.</p>
]]></content:encoded>
			<wfw:commentRss>http://eclipsed4utoo.com/blog/wpf-application-configuration-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# &#8211; Log in to Website Programmatically</title>
		<link>http://eclipsed4utoo.com/blog/log-website-programmatically/</link>
		<comments>http://eclipsed4utoo.com/blog/log-website-programmatically/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 22:00:41 +0000</pubDate>
		<dc:creator>Ryan Alford</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[login]]></category>
		<category><![CDATA[programmatically]]></category>
		<category><![CDATA[WebBrowser]]></category>
		<category><![CDATA[website]]></category>

		<guid isPermaLink="false">http://eclipsed4utoo.com/blog/?p=244</guid>
		<description><![CDATA[In this tutorial, will show how to log into a website through code.  I am going to use Twitter in my example.
THIS IS FOR EDUCATIONAL PURPOSES ONLY.  I WOULD NOT ADVISE THE USE OF THIS TO ALWAYS LOG-IN TO TWITTER.
First, you will need to download and install Tamper Data.  It&#8217;s an add-on for Firefox that [...]]]></description>
			<content:encoded><![CDATA[<p>In this tutorial, will show how to log into a website through code.  I am going to use Twitter in my example.</p>
<p><span style="color: #ff0000;"><strong>THIS IS FOR EDUCATIONAL PURPOSES ONLY.  I WOULD NOT ADVISE THE USE OF THIS TO ALWAYS LOG-IN TO TWITTER.</strong></span></p>
<p>First, you will need to download and install <a href="https://addons.mozilla.org/en-US/firefox/addon/966" target="_blank">Tamper Data</a>.  It&#8217;s an add-on for Firefox that allows you to view and tamper with GET/POST web request data.  We won&#8217;t be doing any tampering.  We will be using it to view what POST parameters the page is expecting.</p>
<p>Next, navigate to the log in page for Twitter(<a href="https://twitter.com/login" target="_blank">http://twitter.com/login</a>).  Once the page has loaded, go to <strong>Tools</strong> &#8211;&gt; <strong>Tamper Data</strong> to open <strong>Tamper Data</strong>.  At the top of Tamper Data, click the <strong>Start Tamper</strong> button.  After clicking the button, click the &#8220;Sign In&#8221; button on Twitter&#8217;s log in page.  Once you hit the Sign In button, Tamper Data will prompt you with this popup&#8230;.</p>
<p><img class="alignnone size-full wp-image-245" title="Tamper Data Popup" src="http://eclipsed4utoo.com/blog/wp-content/uploads/2009/12/12-9-2009-4-24-49-PM.png" alt="Tamper Data Popup" width="324" height="140" /></p>
<p>Click &#8220;Tamper&#8221;.  You will then be presented with this window&#8230;</p>
<p><img class="alignnone size-full wp-image-246" title="Tamper Data" src="http://eclipsed4utoo.com/blog/wp-content/uploads/2009/12/12-9-2009-4-15-09-PM.png" alt="Tamper Data" width="724" height="489" /></p>
<p>If you notice on the right-hand side of the window, you will see the POST parameters.  These are:</p>
<p>authenticity_token<br />
session[username_or_email]<br />
session[password]<br />
commit</p>
<p>Now that we have those, we can close the Tamper Data window, and close Firefox.</p>
<p>Now for the code.  The code is actually fairly simple.  We are just going to use the <strong>WebBrowser</strong> class to make the requests to the server to get the html source of the page.  This will give us the &#8220;authenticity_token&#8221; for us to use in the POST request.</p>
<pre class="brush: csharp;">
string url = &quot;https://twitter.com/login&quot;;
string username = &quot;someUserName&quot;;
string password = &quot;somePassword&quot;;
string commit = &quot;Sign+In&quot;; //this matches the data from Tamper Data

private void Login()
{
     WebBrowser b = new WebBrowser();
     b.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(b_DocumentCompleted);
     b.Navigate(url);
}

private void b_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
     WebBrowser b = sender as WebBrowser;
     string response = b.DocumentText;

     // looks in the page source to find the authenticity token.
     // could also use regular expressions here.
     int index = response.IndexOf(&quot;authenticity_token&quot;);
     int startIndex = index + 41;
     string authenticityToken = response.Substring(startIndex, 40);

     // unregisters the first event handler
     // adds a second event handler
     b.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(b_DocumentCompleted);
     b.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(b_DocumentCompleted2);

     // format our data that we are going to post to the server
     // this will include our post parameters.  They do not need to be in a specific
     //    order, as long as they are concatenated together using an ampersand ( &amp; )
     string postData = string.Format(&quot;authenticity_token={2}&amp;session[username_or_email]={0}&amp;session[password]={1}&amp;commit={3}&quot;, username, password, authenticityToken, commit);

     ASCIIEncoding enc = new ASCIIEncoding();

     //  we are encoding the postData to a byte array
     b.Navigate(&quot;https://twitter.com/sessions&quot;, &quot;&quot;, enc.GetBytes(postData), &quot;Content-Type: application/x-www-form-urlencoded\r\n&quot;);
}

private void b_DocumentCompleted2(object sender, WebBrowserDocumentCompletedEventArgs e)
{
     WebBrowser b = sender as WebBrowser;
     string response = b.DocumentText;

     if (response.Contains(&quot;Sign out&quot;))
     {
         MessageBox.Show(&quot;Login Successful&quot;);
     }
}
</pre>
<p>And that&#8217;s all you need to do.  You can now use the <strong>response</strong> variable to see the tweets that are in your timeline.</p>
]]></content:encoded>
			<wfw:commentRss>http://eclipsed4utoo.com/blog/log-website-programmatically/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>C# &#8211; Twitter API For Desktop</title>
		<link>http://eclipsed4utoo.com/blog/twitter-api-desktop/</link>
		<comments>http://eclipsed4utoo.com/blog/twitter-api-desktop/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 14:16:58 +0000</pubDate>
		<dc:creator>Ryan Alford</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://eclipsed4utoo.com/blog/?p=259</guid>
		<description><![CDATA[I made a post almost 3 months ago about a .Net Twitter API that I had done.  Since then, I have made some modifications to the API.  I have added a couple of more features.  I also included various classes from the System.Web namespace so that I wouldn&#8217;t need a reference to that namespace.  This [...]]]></description>
			<content:encoded><![CDATA[<p>I made a post almost 3 months ago about a .Net Twitter API that I had done.  Since then, I have made some modifications to the API.  I have added a couple of more features.  I also included various classes from the System.Web namespace so that I wouldn&#8217;t need a reference to that namespace.  This allows the API to be used on a mobile device with a very small footprint(the System.Web.dll file is 5MB in size, my .dll is 52KB).</p>
<p>I am missing a few features from my API.  Most notably the new &#8220;Retweet&#8221; functionality and the &#8220;Lists&#8221; functionality.  I am also missing some of the account methods.  Other than that, I believe I have most, if not all, of the other methods.</p>
<p>This API supports both Basic Auth and OAuth.  I would advise to use OAuth, since Twitter will be depreciating Basic Auth in <a href="http://www.techcrunch.com/2009/12/09/twitter-le-web-2009/">June 2010</a>.  To learn more about how OAuth works, check out my <a href="http://eclipsed4utoo.com/blog/net-twitter-desktop-oauth-authentication/">other blog post</a> where I try to explain OAuth.</p>
<p>Remember that this API is for the Desktop OAuth only.  Feel free to download it and make changes to allow OAuth from a web application(yes, they are different &#8220;workflows&#8221;).   Basic Auth should work for both Desktop and Web applications.</p>
<p>I give credit to <a href="http://www.voiceoftech.com/swhitley/?p=681">Shannon Whitley for his original OAuth code</a>.  I made some modifications to it, but the base code of the OAuth is his.</p>
<p>Here is a code snippet on using the API for OAuth authorization.</p>
<pre class="brush: csharp;">
// creats instance and sets Consumer and ConsumerSecret values
TwitEclipseAPI twit = new TwitEclipseAPI();
twit.OAuthConsumerKey = &quot;yourConsumerKey&quot;;
twit.OAuthConsumerSecret = &quot;yourConsumerSecret&quot;;

// makes request to get unauthorized request token
// The method will concatenate the request token to Twitter's Desktop OAuth
//    url (http://twitter.com/oauth/authorize)
string url = twit.OAuthGetUnauthorizedRequestToken();

// opens the user's default browser and browses to Twitter's OAuth page
Process.Start(url);

//  You will need to get the PIN from the user
//  I just created a popup and have the user enter the PIN
//       into a textbox in the popup
frmPinPopup popup = new frmPinPopup();
popup.ShowDialog();

string PIN = popup.PIN;
popup.Dispose();

// Gets the Token and TokenSecret that will be needed for all
//   subsequent requests.  You will need to save these values to keep
//   from forcing the user to authorize your application everytime they
//   open your application.
twit.OAuthRequestAccessToken(PIN);

// You can check for success by checking the OAuthAccessToken
//    and OAuthAccessTokenSecret values.  If they are populated, then
//    it was successful.  If they are empty, then it failed.
if (!string.IsNullOrEmpty(twit.OAuthAccessToken) &amp;&amp; !string.IsNullOrEmpty(twit.OAuthAccessTokenSecret))
{
    MessageBox.Show(&quot;Authorization Successful&quot;);
}
</pre>
<p>Each method of the API will check the OAuthAccessToken and OAuthAccessTokenSecret values to determine whether it needs to do the request using OAuth or Basic Auth.</p>
<p>I have put the code on <a href="http://twiteclipseapi.codeplex.com/" target="_blank">CodePlex</a>.  It will contain both the .dll file, and the source code.  I felt it was easier to keep up with using CodePlex.</p>
<p>If you have code questions, you can post here.  However, if you are on Google Wave, <a href="https://wave.google.com/wave/#restored:search:twiteclipseapi,restored:wave:googlewave.com!w%252BtKPwoLd7A.5">you can go here</a>.  If you would like Google Wave, I have about 20 invitations that I can send out.  Using Google Wave would be much better since we could exchange code using a code snippet tool.</p>
]]></content:encoded>
			<wfw:commentRss>http://eclipsed4utoo.com/blog/twitter-api-desktop/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>TwitEclipse &#8211; My Twitter Desktop Client</title>
		<link>http://eclipsed4utoo.com/blog/twiteclipse-twitter-desktop-client/</link>
		<comments>http://eclipsed4utoo.com/blog/twiteclipse-twitter-desktop-client/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 20:15:26 +0000</pubDate>
		<dc:creator>Ryan Alford</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[twitter desktop client]]></category>
		<category><![CDATA[wpf]]></category>

		<guid isPermaLink="false">http://eclipsed4utoo.com/blog/?p=195</guid>
		<description><![CDATA[I have released a BETA version of my Twitter Desktop Client called TwitEclipse.  I have been writing a Twitter API library in .Net for a while now, and figured I might as well write a desktop client also.
The client uses .Net 3.5 SP1 and WPF.  It was a great learning experience to learn WPF since [...]]]></description>
			<content:encoded><![CDATA[<p>I have released a BETA version of my Twitter Desktop Client called TwitEclipse.  I have been writing a Twitter API library in .Net for a while now, and figured I might as well write a desktop client also.</p>
<p>The client uses .Net 3.5 SP1 and WPF.  It was a great learning experience to learn WPF since I had almost no previous experience with it.</p>
<p>If you want to download it and test it out, you can download it from <a title="TwitEclipse" href="http://eclipsed4utoo.com/TwitEclipse" target="_blank">here</a>.  Remember that it is a BETA.  You could run into issues.  If you do, be sure to let me know so I can fix them.  I will also be adding additional features to the app once I get a chance.</p>
<p>I will be releasing my Twitter API library soon also.</p>
]]></content:encoded>
			<wfw:commentRss>http://eclipsed4utoo.com/blog/twiteclipse-twitter-desktop-client/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.Net &#8211; Twitter Desktop OAuth Authorization</title>
		<link>http://eclipsed4utoo.com/blog/net-twitter-desktop-oauth-authentication/</link>
		<comments>http://eclipsed4utoo.com/blog/net-twitter-desktop-oauth-authentication/#comments</comments>
		<pubDate>Sun, 27 Sep 2009 14:25:12 +0000</pubDate>
		<dc:creator>Ryan Alford</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://eclipsed4utoo.com/blog/?p=177</guid>
		<description><![CDATA[I recent finished the implementation of OAuth into my .Net Twitter library.  I can safely say that it was a pain in the ass.  I have never been so frustrated by &#8220;(401) Unauthorized&#8221; errors.  But alas, I was able to complete the implementation.
As a guideline, I used Shannon Whitley&#8217;s code, since that&#8217;s the only .Net [...]]]></description>
			<content:encoded><![CDATA[<p>I recent finished the implementation of OAuth into my .Net Twitter library.  I can safely say that it was a pain in the ass.  I have never been so frustrated by &#8220;(401) Unauthorized&#8221; errors.  But alas, I was able to complete the implementation.</p>
<p>As a guideline, I used <a href="http://www.voiceoftech.com/swhitley/?p=681">Shannon Whitley&#8217;s</a> code, since that&#8217;s the only .Net reference Twitter gives for OAuth implementation.  Since I had already created my own Twitter library that consumed 95% of the current Twitter REST API methods, I couldn&#8217;t simply add his two code files to my project and run with it.  I had to change some stuff around to get it to work with mine.  I also made some modifications to his class that makes all of the OAuth implementations.  In my opinion, it had a lot of code that didn&#8217;t need to be there.  I also created another class to consume the parameters needed for the OAuth requests so that I wasn&#8217;t passing 9 parameters to different methods.</p>
<p>So first, I want to explain OAuth a little and how it works for a desktop Twitter client.  I stress desktop application because Twitter has different implementations for web clients vs. desktop clients.</p>
<p>So <a href="http://oauth.net/">OAuth</a> is an open protocol to allow secure authorization to an API.  This means that for Twitter, the user&#8217;s of a desktop client aren&#8217;t required to give their username and password to the client.  The client can use OAuth to communicate with with the Twitter API without needing usernames and passwords.</p>
<p>Now for the process.  This was the toughest part for me to get my head around.  I couldn&#8217;t really find any good explanations of each step of the process.  So I will explain as much as I can.</p>
<p>Your first step is to <a href="http://twitter.com/oauth_clients">register your application</a> with Twitter.  This does a couple of things.  It gives you a &#8220;Consumer Key&#8221; and &#8220;Consumer Secret&#8221;.  These are needed in each OAuth request that is made.  This also provides the &#8220;source&#8221; for the tweets.  Twitter recently removed the ability to set the &#8220;source&#8221; of the tweet to your application name when using Basic Authentication.  This is now only allowed when using OAuth.</p>
<p>When making requests to OAuth methods, there are a number of parameters that are required for all requests.  And depending on the request, some may be expecting additional parameters.  The required parameters for all requests are:</p>
<p>1.  Consumer Key &#8211; given when you register your application.<br />
2.  Nonce &#8211; a random string.  I use a GUID.  Some use a random number.<br />
3.  Timestamp &#8211; the number of seconds since January 1, 1970.<br />
4.  Signature &#8211; an HMAC-SHA1 string of all of the other parameters.<br />
5.  Signature Method &#8211; HMAC-SHA1.  Currently Twitter only supports HMAC-SHA1.<br />
6.  Token &#8211; unauthorized/request/access token.<br />
7.  Verifier &#8211; the PIN from the Desktop Workflow<br />
8.  Version &#8211; &#8220;1.0&#8243;</p>
<p>When creating the signature, you will use the Consumer Secret and Token Secret as the key.  Also, the parameters that are part of the signature need to be in order when creating the signature and when making the request.  The signature is appended to the end of the parameters so it does not need to be in order.</p>
<p>Here is the order that the parameters need to be in:</p>
<p>1.  oauth_consumer_key<br />
2.  oauth_nonce<br />
3.  oauth_signature_method<br />
4.  oauth_timestamp<br />
5.  oauth_token<br />
6.  oauth_verifier<br />
7.  oauth_version<br />
8.  oauth_signature</p>
<p>To make the signature, you would use this code:</p>
<pre class="brush: csharp;">
HMACSHA1 hmacsha1 = new HMACSHA1();
hmacsha1.Key = Encoding.ASCII.GetBytes(string.Format(&quot;{0}&amp;{1}&quot;, UrlEncode(oauth.CustomerSecret), string.IsNullOrEmpty(oauth.TokenSecret) ? &quot;&quot; : UrlEncode(oauth.TokenSecret)));
// code to compute the hash to return as the signature
</pre>
</pre>
<p>Moving to the code, your first step is to send an HttpWebRequest to http://twitter.com/oauth/request_token .  This request will return an Unauthorized Token and Unauthorized Token Secret.  In the current library that I used(and my Twitter API library), this method will return the entire URL including the token and secret, which will look like this...</p>
<p>http://twitter.com/oauth/authorize?oauth_token=UnauthorizedTokenValue</p>
<p>Your next step is to have the user go to the URL that was returned from the previous step.  This is the step that many developers have complained about.  When navigating to this URL, the user will enter their username and password.  They will then be given a PIN.  You will need to get this PIN from the user because it is required for you to get an Access Token.  I simply give a textbox for the user to copy and paste to.</p>
<p>After receiving the PIN, you will now need to make a request to http://twitter.com/oauth/access_token .  This will give you the Access Token that you will need to make all other requests to the Twitter REST API.  You will need to save these somewhere, whether it be in a database or in a file.</p>
<p>Here is some client code..</p>
<pre class="brush: csharp;">
TwitEclipseAPI twit = new TwitEclipseAPI();
twit.OAuthConsumerKey = &quot;&quot;; // your consumer key
twit.OAuthConsumerSecret = &quot;&quot;; // your consumer secret

// Once you get the access token, this
//    would be out to set it
//twit.OAuthAccessToken = &quot;&quot;;
//twit.OAuthAccessTokenSecret = &quot;&quot;;

string redirectURL = twit.OAuthGetUnauthorizedRequestToken();
Process.Start(redirectURL);

// show a popup to enter PIN
frmEnterPIN f = new frmEnterPIN();
f.ShowDialog();
string pin = f.PIN;
f.Dispose();

if (twit.OAuthRequestAccessToken(pin))
{
   twit.UpdateUserStatus(&quot;This is a test&quot;);
}
</pre>
<p>I have posted a link to the code files for my library and how it uses the edited version of Shannon's library.</p>
<p>Post any questions in the comments.  I will answer them as best I can.  If  you run into any issues, please let me know.  Thanks.</p>
<p><strong>UPDATE:</strong> I have update the site with a new version of my twitter library.  I have also moved the download to CodePlex so that it will be easier for me to update.  <a href="http://twiteclipseapi.codeplex.com/" target="_blank">Here is the link</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://eclipsed4utoo.com/blog/net-twitter-desktop-oauth-authentication/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>C# &#8211; View PDF In Windows Form</title>
		<link>http://eclipsed4utoo.com/blog/view-pdf-windows-form/</link>
		<comments>http://eclipsed4utoo.com/blog/view-pdf-windows-form/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 13:33:29 +0000</pubDate>
		<dc:creator>Ryan Alford</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[PDFSharp]]></category>
		<category><![CDATA[windows forms]]></category>

		<guid isPermaLink="false">http://eclipsed4utoo.com/blog/?p=174</guid>
		<description><![CDATA[Here is a quick tutorial on how to view a PDF file in a Windows Form application.
I downloaded PDFSharp (free).  While it is a third-party application, it will still require the PC to have Adobe Reader (or better) installed.
And here is the small piece of code needed to display a PDF in a Windows Form:

string [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a quick tutorial on how to view a PDF file in a Windows Form application.</p>
<p>I downloaded <a href="http://www.pdfsharp.net/" target="_blank">PDFSharp (free)</a>.  While it is a third-party application, it will still require the PC to have Adobe Reader (or better) installed.</p>
<p>And here is the small piece of code needed to display a PDF in a Windows Form:</p>
<pre class="brush: csharp;">
string helpFile = &quot;C:\HelpFile.pdf&quot;;

// the pdfAcroViewer is a control from PDFSharp
// You can add the control to the Toolbox in Visual Studio
//     then drag it onto the form.
pdfAcroViewer.LoadFile(helpFile);
pdfAcroViewer.ShowToolbar = false;
pdfAcroViewer.SetPageMode(PdfSharp.Pdf.PdfPageMode.FullScreen);
</pre>
<p><strong>EDITED:</strong> After a number of questions in the comments, I decided to download the latest version and see if I could find the file.  The file itself is not in the latest version.  When I did this more than a year ago, the latest version was version 1.0.898.  That version is still for download on sourceforge.</p>
<p>(screenshot below)</p>
<p><img class="alignnone size-full wp-image-213" title="PDFSharp" src="http://eclipsed4utoo.com/blog/wp-content/uploads/2009/09/PDFSharp.png" alt="PDFSharp" width="645" height="358" /></p>
<p>If you download that version, there will be directory located at &#8220;\PDFSharp\PdfViewer\PdfSharp.Viewing&#8221;.  In that directory, you will see a Visual Studio project with the name &#8220;PdfSharp.Viewing.csproj&#8221;.  Open the project in Visual Studio, and build the project in Release mode.  After building, you will have created a &#8220;bin\release&#8221; folder in that same directory.  You will need all of the .dlls in that directory(should be 6 of them).  One of them will be the &#8220;PdfSharp.Viewing.dll&#8221; which should contain the PdfAcroViewer control from the code above.</p>
<p>Post in the comments if this works for you.</p>
]]></content:encoded>
			<wfw:commentRss>http://eclipsed4utoo.com/blog/view-pdf-windows-form/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>
