An extensive examination of data structures in .NET

Check out this great article by Scott Mitchell regarding data structures in .NET 2.0.  It’s a six-part series that pretty much covers all that you’ll need to know.

It goes like this:

Part 1: An Introduction to Data Structures
Part 2: The Queue, Stack, and Hashtable
Part 3: Binary Trees and BSTs
Part 4: Building a Better Binary Search Tree
Part 5: From Trees to Graphs
Part 6: Efficiently Representing Sets

Enjoy!  \m/

 

Bind an XMLDataSource to a GridView control

On one of my ASP.NET 2.0 projects, I had to use an XML file as the data source for a GridView control. The problem was that I had never used this method before. But after doing some research, I found it to be very similar (and straightforward) to binding to a database – with the exception of the need to use XPath.

So…without further adieu, here are the steps and code. Enjoy!

1. Create an XML file that contains your data, like below (taken from Microsoft’s website to save a lot of typing). Save it as books.xml.

<font size="2"><span style="color: rgb(0,0,255)">&lt;?</span><span style="color: rgb(163,21,21)">xml</span><span style="color: rgb(0,0,255)"> </span><span style="color: rgb(255,0,0)">version</span><span style="color: rgb(0,0,255)">=</span>"<span style="color: rgb(0,0,255)">1.0</span>"</font><font size="2"><span style="color: rgb(0,0,255)">?&gt;
&lt;</span><span style="color: rgb(163,21,21)">catalog</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
  &lt;</span><span style="color: rgb(163,21,21)">book</span><span style="color: rgb(0,0,255)"> </span><span style="color: rgb(255,0,0)">id</span><span style="color: rgb(0,0,255)">=</span>"<span style="color: rgb(0,0,255)">bk101</span>"</font><font size="2"><span style="color: rgb(0,0,255)">&gt;
    &lt;</span><span style="color: rgb(163,21,21)">author</span><span style="color: rgb(0,0,255)">&gt;</span>Gambardella, Matthew<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">author</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
    &lt;</span><span style="color: rgb(163,21,21)">title</span><span style="color: rgb(0,0,255)">&gt;</span>XML Developer's Guide<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">title</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
    &lt;</span><span style="color: rgb(163,21,21)">genre</span><span style="color: rgb(0,0,255)">&gt;</span>Computer<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">genre</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
    &lt;</span><span style="color: rgb(163,21,21)">price</span><span style="color: rgb(0,0,255)">&gt;</span>44.95<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">price</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
    &lt;</span><span style="color: rgb(163,21,21)">publish_date</span><span style="color: rgb(0,0,255)">&gt;</span>2000-10-01<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">publish_date</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
    &lt;</span><span style="color: rgb(163,21,21)">description</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
</span>      An in-depth look at creating applications
      with XML.
<span style="color: rgb(0,0,255)">    &lt;/</span><span style="color: rgb(163,21,21)">description</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
  &lt;/</span><span style="color: rgb(163,21,21)">book</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
  &lt;</span><span style="color: rgb(163,21,21)">book</span><span style="color: rgb(0,0,255)"> </span><span style="color: rgb(255,0,0)">id</span><span style="color: rgb(0,0,255)">=</span>"<span style="color: rgb(0,0,255)">bk102</span>"</font><font size="2"><span style="color: rgb(0,0,255)">&gt;
    &lt;</span><span style="color: rgb(163,21,21)">author</span><span style="color: rgb(0,0,255)">&gt;</span>Ralls, Kim<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">author</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
    &lt;</span><span style="color: rgb(163,21,21)">title</span><span style="color: rgb(0,0,255)">&gt;</span>Midnight Rain<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">title</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
    &lt;</span><span style="color: rgb(163,21,21)">genre</span><span style="color: rgb(0,0,255)">&gt;</span>Fantasy<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">genre</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
    &lt;</span><span style="color: rgb(163,21,21)">price</span><span style="color: rgb(0,0,255)">&gt;</span>5.95<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">price</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
    &lt;</span><span style="color: rgb(163,21,21)">publish_date</span><span style="color: rgb(0,0,255)">&gt;</span>2000-12-16<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">publish_date</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
    &lt;</span><span style="color: rgb(163,21,21)">description</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
</span>      A former architect battles corporate zombies,
      an evil sorceress, and her own childhood to become queen
      of the world.
<span style="color: rgb(0,0,255)">    &lt;/</span><span style="color: rgb(163,21,21)">description</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
  &lt;/</span><span style="color: rgb(163,21,21)">book</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
&lt;/</span><span style="color: rgb(163,21,21)">catalog</span><span style="color: rgb(0,0,255)">&gt;</span></font>

2. Add a GridView control to your .aspx page and rename it to gdvBooks.
3. Drag an XmlDataSource control to your form, rename it xdsBooks, and assign your XML file (books.xml) in the control’s DataFile property.
4. Next, change to Source view and input the code below.

<font size="2"><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">asp</span><span style="color: rgb(0,0,255)">:</span><span style="color: rgb(163,21,21)">GridView</span> <span style="color: rgb(255,0,0)">ID</span><span style="color: rgb(0,0,255)">="gdvServerVersions"</span> <span style="color: rgb(255,0,0)">runat</span><span style="color: rgb(0,0,255)">="server"</span>         </font>
<font size="2">    <span style="color: rgb(255,0,0)">AutoGenerateColumns</span><span style="color: rgb(0,0,255)">="False"</span> <span style="color: rgb(255,0,0)">DataKeyNames</span><span style="color: rgb(0,0,255)">="id"</span>         </font>
<font size="2">    <span style="color: rgb(255,0,0)">DataSourceID</span><span style="color: rgb(0,0,255)">="xdsServerVersions" </span><span style="color: rgb(255,0,0)">EmptyDataText</span><span style="color: rgb(0,0,255)">="No data available."&gt;</span>                </font>
<font size="2">    <span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">Columns</span><span style="color: rgb(0,0,255)">&gt;</span>
        <span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">asp</span><span style="color: rgb(0,0,255)">:</span><span style="color: rgb(163,21,21)">BoundField</span> <span style="color: rgb(255,0,0)">HeaderText</span><span style="color: rgb(0,0,255)">="Book ID" </span><span style="color: rgb(255,0,0)">DataField</span><span style="color: rgb(0,0,255)">="id"</span> </font>
<font size="2">            <span style="color: rgb(255,0,0)">SortExpression</span><span style="color: rgb(0,0,255)">="id"</span> </font><font size="2"><span style="color: rgb(0,0,255)">/&gt;
</span>        <span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">asp</span><span style="color: rgb(0,0,255)">:</span><span style="color: rgb(163,21,21)">TemplateField</span> <span style="color: rgb(255,0,0)">HeaderText</span></font><font size="2"><span style="color: rgb(0,0,255)">="Author"&gt;
</span>            <span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">ItemTemplate</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
</span>                <span style="background: rgb(255,238,98)">&lt;%<span style="color: rgb(0,0,255)"></span>#</span> XPath("author") </font><font size="2"><span style="background: rgb(255,238,98)">%&gt;
</span>            <span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">ItemTemplate</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
</span>        <span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">asp</span><span style="color: rgb(0,0,255)">:</span><span style="color: rgb(163,21,21)">TemplateField</span><span style="color: rgb(0,0,255)">&gt;</span>
        <span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">asp</span><span style="color: rgb(0,0,255)">:</span><span style="color: rgb(163,21,21)">TemplateField</span> <span style="color: rgb(255,0,0)">HeaderText</span></font><font size="2"><span style="color: rgb(0,0,255)">="Title"&gt;
</span>            <span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">ItemTemplate</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
</span>                <span style="background: rgb(255,238,98)">&lt;%<span style="color: rgb(0,0,255)"></span>#</span> XPath("title") </font><font size="2"><span style="background: rgb(255,238,98)">%&gt;
</span>            <span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">ItemTemplate</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
</span>        <span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">asp</span><span style="color: rgb(0,0,255)">:</span><span style="color: rgb(163,21,21)">TemplateField</span><span style="color: rgb(0,0,255)">&gt;</span>
        <span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">asp</span><span style="color: rgb(0,0,255)">:</span><span style="color: rgb(163,21,21)">TemplateField</span> <span style="color: rgb(255,0,0)">HeaderText</span></font><font size="2"><span style="color: rgb(0,0,255)">="Genre"&gt;
</span>            <span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">ItemTemplate</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
</span>                <span style="background: rgb(255,238,98)">&lt;%<span style="color: rgb(0,0,255)"></span>#</span> XPath("genre") </font><font size="2"><span style="background: rgb(255,238,98)">%&gt;
</span>            <span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">ItemTemplate</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
</span>        <span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">asp</span><span style="color: rgb(0,0,255)">:</span><span style="color: rgb(163,21,21)">TemplateField</span><span style="color: rgb(0,0,255)">&gt;</span>
        <span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">asp</span><span style="color: rgb(0,0,255)">:</span><span style="color: rgb(163,21,21)">TemplateField</span> <span style="color: rgb(255,0,0)">HeaderText</span></font><font size="2"><span style="color: rgb(0,0,255)">="Price"&gt;
</span>            <span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">ItemTemplate</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
</span>                <span style="background: rgb(255,238,98)">&lt;%<span style="color: rgb(0,0,255)"></span>#</span> XPath("price") </font><font size="2"><span style="background: rgb(255,238,98)">%&gt;
</span>            <span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">ItemTemplate</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
</span>        <span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">asp</span><span style="color: rgb(0,0,255)">:</span><span style="color: rgb(163,21,21)">TemplateField</span><span style="color: rgb(0,0,255)">&gt;</span>
        <span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">asp</span><span style="color: rgb(0,0,255)">:</span><span style="color: rgb(163,21,21)">TemplateField</span> <span style="color: rgb(255,0,0)">HeaderText</span></font><font size="2"><span style="color: rgb(0,0,255)">="Publish Date"&gt;
</span>            <span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">ItemTemplate</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
</span>                <span style="background: rgb(255,238,98)">&lt;%<span style="color: rgb(0,0,255)"></span>#</span> XPath("publish_date") </font><font size="2"><span style="background: rgb(255,238,98)">%&gt;
</span>            <span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">ItemTemplate</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
</span>        <span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">asp</span><span style="color: rgb(0,0,255)">:</span><span style="color: rgb(163,21,21)">TemplateField</span><span style="color: rgb(0,0,255)">&gt;</span>
        <span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">asp</span><span style="color: rgb(0,0,255)">:</span><span style="color: rgb(163,21,21)">TemplateField</span> <span style="color: rgb(255,0,0)">HeaderText</span></font><font size="2"><span style="color: rgb(0,0,255)">="Description"&gt;
</span>            <span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">ItemTemplate</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
</span>                <span style="background: rgb(255,238,98)">&lt;%<span style="color: rgb(0,0,255)"></span>#</span> XPath("description")</font><font size="2"><span style="background: rgb(255,238,98)">%&gt;
</span>            <span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">ItemTemplate</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
</span>        <span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">asp</span><span style="color: rgb(0,0,255)">:</span><span style="color: rgb(163,21,21)">TemplateField</span><span style="color: rgb(0,0,255)">&gt;</span>
    <span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">Columns</span></font><font size="2"><span style="color: rgb(0,0,255)">&gt;
&lt;/</span><span style="color: rgb(163,21,21)">asp</span><span style="color: rgb(0,0,255)">:</span><span style="color: rgb(163,21,21)">GridView</span><span style="color: rgb(0,0,255)">&gt;</span></font>&nbsp;
5. That’s it! Simply navigate to your newly created page and see the results.

How to POP3 in C#

Here’s an excellent how-to on using POP3 in your C# apps.  I’ve used it successfully.

<font face="Verdana" color="#000000" size="2">The Pop3 class derives from the System.Net namespace:</font>
<font size="2"><span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(0,0,255)">class</span> <span style="color: rgb(43,145,175)">Pop3</span> : System.Net.Sockets.<span style="color: rgb(43,145,175)">TcpClient</span></font>
<font size="2"><span style="color: rgb(43,145,175)"></span></font>&nbsp;
<font size="2"><font face="Courier New"><span style="color: rgb(43,145,175)"><font face="Verdana" color="#000000" size="2">And the class consists of the following fields and methods:</font></span></font></font>
<span style="color: rgb(0,0,255)"><span style="color: rgb(0,0,255)"><font size="2"><span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(43,145,175)">ArrayList</span> List()</font></span></span>
<span style="color: rgb(0,0,255)"><font size="2"><span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(0,0,255)">class</span> <span style="color: rgb(43,145,175)">Pop3Message</span></font></span>
<font size="2"><span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(0,0,255)">void</span> Connect(<span style="color: rgb(0,0,255)">string</span> server, <span style="color: rgb(0,0,255)">string</span> username, <span style="color: rgb(0,0,255)">string</span> password)</font>
<font size="2"><span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(0,0,255)">void</span> Disconnect()</font>
<font size="2"><span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(43,145,175)">Pop3Message</span> Retrieve(<span style="color: rgb(43,145,175)">Pop3Message</span> rhs)</font>
<font size="2"><span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(0,0,255)">void</span> Delete(<span style="color: rgb(43,145,175)">Pop3Message</span> rhs)</font>
<font size="2"><span style="color: rgb(0,0,255)">private</span> <span style="color: rgb(0,0,255)">void</span> Write(<span style="color: rgb(0,0,255)">string</span> message)</font>
<font size="2"><span style="color: rgb(0,0,255)">private</span> <span style="color: rgb(0,0,255)">string</span> Response()</font>
<font size="2"></font>&nbsp;
<font face="Verdana" color="#000000" size="2">Finally, below is a code snippet on how to use the Pop3 class:</font>
<font size="2"><span style="color: rgb(0,0,255)">static</span> <span style="color: rgb(0,0,255)">void</span> Main(<span style="color: rgb(0,0,255)">string</span>[] args)
{
    </font><font size="2"><span style="color: rgb(0,0,255)">try
</span>    {
        Pop3 obj = <span style="color: rgb(0,0,255)">new</span> Pop3();
        obj.Connect(<span style="color: rgb(163,21,21)">"mail.xxx.com"</span>, <span style="color: rgb(163,21,21)">"yyy"</span>, <span style="color: rgb(163,21,21)">"zzz"</span>);
        <span style="color: rgb(43,145,175)">ArrayList</span> list = obj.List();
        <span style="color: rgb(0,0,255)">foreach</span> (Pop3Message msg <span style="color: rgb(0,0,255)">in</span> list)
        {
            Pop3Message msg2 = obj.Retrieve(msg);
            System.<span style="color: rgb(43,145,175)">Console</span>.WriteLine(<span style="color: rgb(163,21,21)">"Message {0}: {1}"</span>,
                msg2.number, msg2.message);
        }
        obj.Disconnect();
    }
    <span style="color: rgb(0,0,255)">catch</span> (Pop3Exception e)
    {
        System.<span style="color: rgb(43,145,175)">Console</span>.WriteLine(e.ToString());
    }
    <span style="color: rgb(0,0,255)">catch</span> (System.<span style="color: rgb(43,145,175)">Exception</span> e)
    {
        System.<span style="color: rgb(43,145,175)">Console</span>.WriteLine(e.ToString());
    }
}</font>

Nifty ey?  So check out the how-to article.  Enjoy!