C# DataSource

The DataSource property allows data binding on Windows Forms controls. With it we bind an array to a ListBox on the screen—and display all the strings. As changes are made to the List, we update the control on the screen.

ListBoxProgramming data: rectangle

Example

First, your ListBox control—or any different kind of control you may have—has a DataSource property that can be assigned a value. You can assign a collection to it.
Collections include arrays,
Lists
and DataTables.

ArrayListDataTable
Example that sets DataSource property: C#

public partial class MainWindow : Form
{
    List<string> _sideList = new List<string>();

    public MainWindow()
    {
	InitializeComponent();
	sideListBox1.DataSource = _sideList;
    }
}
Squares

This example has a List collection field. The above Form, which is called MainWindow, has a member variable of the List generic type. This will be where we want to store the strings that will show on the ListBox.

Note:The constructor and the partial class and InitializeComponent were autogenerated by the Designer.

Partial

And:In the constructor, it assigns to the DataSource. The DataSource property is assigned to the List member variable.

Constructor

Example 2

Plus

The whole point here is that we want to add items to the ListBox. We can add items to the bottom or the top, or anywhere in better. A really good effect is adding items to the top, so they are easily seen.

Next:Here is a custom method that prepends a string to the top of the control, and then makes it display.

List Insert
Example that uses BindingContext: C#

private void AddListLine(string lineIn)
{
    // ... Insert the string at the front of the List.
    _sideList.Insert(0, lineIn);

    // ... Force a refresh of the ListBox.
    ((CurrencyManager)sideListBox1.BindingContext[_sideList]).Refresh();
}
String type

The method receives a string and then Inserts it to the start of the member List, and then forces the ListBox to refresh. The syntax at the end does a cast and a lookup to get the CurrencyManager and then Refreshes the ListBox.

Tip:In the CurrencyManager type, the word Currency refers to current. It is used to ensure a control is current.

Example 3

So far we have seen the DataSource assignment and then the method AddListLine that inserts a string at the top of the ListBox. This setup allows us to send a string to the method. It will show up at the top of the ListBox.

Example that calls method: C#

void backgroundWorker1_RunWorkerCompleted(object sender,
    RunWorkerCompletedEventArgs e)
{
    // ... Show some results from the BackgroundWorker task.
    AddListLine("5000 games: " + (string)e.Result);
}

Summary

We used the DataSource property on a ListBox control in Windows Forms. By combining one List, DataSource and ListBox, and using CurrencyManager, we have a ListBox that will show the newest result on the top.

Thus:These properties together result in an interface that is versatile and easily maintained.


C#: Windows