# Thursday, September 16, 2004
Test Driven Development

Last night Eric Maino (http://www.meeteric.net) gave a talk at GANG (http://www.migang.org) about Test Driven Development (TDD). It was a very good talk that touched on a lot of the important issues involved in testing. It was a good overview of NUnit (http://www.nunit.org) and how TDD works. The slides will be up on the GANG web site soon.

 

One of the questions that came up was how GUI testing works with NUnit. I happened to attend a talk at SD West (http://www.SDExpo.com) by Elisabeth Hendrickson from Quality Tree (http://www.qualitytree.com) on that exact topic. She has been working on a test harness for GUI testing that’s built on NUnit. You can learn more about it here - http://www.qualitytree.com/autotest/dotnetgui.htm.


Development | Utilities
Thursday, September 16, 2004 8:58:14 PM (GMT Standard Time, UTC+00:00)  #  Comments [0] 

# Friday, June 25, 2004
Snippet Compiler

I’ve found this little tool invaluable. I use it to test out RegEx expressions, String Formatting and tons of other useful little bits of code.

I used to keep a dummy project around for this purpose, but it’s a pain to load VS.NET every time that you want to test a quick string formatting and it’s too painful to test to that location in your real application just to see if it worked and see what it does.

I hope that you enjoy it as much as I do.


Development
Friday, June 25, 2004 1:56:05 PM (GMT Standard Time, UTC+00:00)  #  Comments [0] 

# Thursday, June 17, 2004
History of Programming Languages

I thought that this was an interesting item. It’s the history of programming languages back to the mid-50s. There are a few things that I saw that were interesting – such as the fact that Fortran will be 50 this November and is the ancestor to a number of programming languages. There were a few inaccuracies, such as the fact that they skipped from VB 1.0 to VB 6.0 and completely missed all of the releases between.

Oh well, it’s an interesting thing anyways…


Development
Thursday, June 17, 2004 7:54:38 PM (GMT Standard Time, UTC+00:00)  #  Comments [0] 

# Wednesday, June 02, 2004
Host a Native Control on .NET CF

There are a number of reasons that you might want to host a native windows control on the Compact Framework and now there’s a way using the OpenNetCF framework.


Compact Framework
Wednesday, June 02, 2004 9:32:12 PM (GMT Standard Time, UTC+00:00)  #  Comments [0] 

New White Paper

Articles | Compact Framework
Wednesday, June 02, 2004 9:22:58 PM (GMT Standard Time, UTC+00:00)  #  Comments [0] 

# Thursday, April 22, 2004
CodeDom Article

I know that it's not a really big deal to many authors, but I got my first article published on the Fawcette Reports web site.

I didn't know that it was actually published until I started getting emails about it - but it's linked below.


Articles
Thursday, April 22, 2004 1:53:43 PM (GMT Standard Time, UTC+00:00)  #  Comments [0] 

# Tuesday, February 03, 2004
Databinding on the Compact Framework

Through careful use of databinding, your UI code can be very light weight.

There are two forms of databinding that we need to discuss, binding to properties of objects and binding to a list of objects – which often binds to properties of the individual objects.

First, let’s deal with the less talked about binding to properties. The code to setup a binding to a particular property on an object is fairly simple. The following snippet binds the text property of the _txtName textbox to the name of a person.

 

_txtName.DataBindings.Add("Text", person, "name");

 

This assumes several things. First of all, it assumes that the TextBox has a Text property. Second, it assumes that the person is not null and lastly, that the person has a valid property called name. Once you work through those assumptions, the TextBox in question will not only show but allow you to edit the person’s name with that one line of code. If, however, instead of a person object, you have a table with rows of people, you will bind as follows.

 

_txtName.DataBindings.Add("Text", _dataSet.Tables["person"], "name");

 

As a quick note, on the full framework, I would bind the text as follows.

 

_txtName.DataBindings.Add("Text", _dataSet, "person.name");

 

However, this is a shortcoming of the Compact Framework in that it is not able to bind to expressions like “person.name”.

 

Back to the original thought, as this is a simple textbox, this is only able to bind to one row at a time so it’s going to enlist the BindingManagerBase for the form to pick which row is bound. The BindingManagerBase controls the databinding for a particular object for all of the bound sub-controls of the control from which it was returned. Most often, it is used to control the bindings for an entire form, as I’ve done in the sample, but it can also be used on a particular Tab or Panel. To get the BindingManagerBase, use the BindingContext for the container in question to retrieve it as follows.

 

BindingManagerBase _bindingManager = null;

_bindingManager = this.BindingContext[_dataSet.Tables["person"]];

 

At this point, you can use the BindingManagerBase to control the position in the list and thus the current row bound by the TextBox by setting its Position or to monitor changes to the object by subscribing to the CurrentChanged event.

 

BindingManagerBase _bindingManager = null;

private void Bind()

{

            _bindingManager = this.BindingContext[_dataSet.Tables["person"]];

            _bindingManager.PositionChanged +=

                      new EventHandler(_bindingManager_PositionChanged);

_bindingManager.CurrentChanged +=

         new EventHandler(_bindingManager_CurrentChanged);

 

            _txtName.DataBindings.Add("Text", _dataSet.Tables["person"], "name");

            _txtEmail.DataBindings.Add("Text", _dataSet.Tables["person"], "email");

}

private void _btnNext_Click(object sender, System.EventArgs e)

{

            _bindingManager.Position++;

}

private void _btnPrevious_Click(object sender, System.EventArgs e)

{

            _bindingManager.Position--;                   

}

 

This will allow you to cycle through the list easily.

 

The second form of databinding, binding to lists, is even easier. The code is as follows.

 

private void BindList()

{

            _lstMain.DataSource = _dataSet.Tables["person"];

            _lstMain.DisplayMember = "name";

}

 

Setting the DataSource on the list requires that the list (or table in this sample) implements IList or IListSource, which the DataTable does. Setting the DisplayMember is similar to the binding of the properties that we did earlier in that it will show the name column or property on the person object or row in the list.

 

There are some benefits to combining these methods of databinding. For example, if you bind the table to the list and bind the textbox to the same table – the listbox will automatically keep track of the positioning of the BindingManagerBase.

 

In conclusion, there is very little need to write a lot of UI code anymore. Instead, leverage databinding to your advantage to keep your UI lightweight and responsive. 

 

For a full code listing download the sample code below.


Development
Tuesday, February 03, 2004 10:02:14 PM (GMT Standard Time, UTC+00:00)  #  Comments [0] 

# Wednesday, January 28, 2004
Unit Testing

There is a fantastic article on the subject linked to from this item by Justin Gehtland. I really like how the Justin equates unit testing to the spell checker in Word. You shouldn't have to wait until you are done with the document or, worse, wait until the client calls you to know that you misspelled something.


Development
Wednesday, January 28, 2004 11:13:42 PM (GMT Standard Time, UTC+00:00)  #  Comments [1] 

# Monday, January 26, 2004
Speaking at DevDays
I'll be speaking at DevDays Detroit - March 3, 2004

Speaking
Monday, January 26, 2004 5:13:49 PM (GMT Standard Time, UTC+00:00)  #  Comments [0]