The Inquisitive Coder - Davy Brion’s Blog

Thinking outside of the typical .NET box

Archive for the 'WinForms' Category


Creating a sortable BindingList

Posted by Davy Brion on 10th September 2007

Suppose you want to bind a collection of your custom objects to a DataGridView in a WinForm, and you want it to be sortable without having to write a lot of code. Once again, using Marc Brooks’ DynamicComparer this becomes an easy task. Especially when you combine it with the BindingList class (which is a default implementation of the IBindingList interface):

    public class SortableBindingList<T> : BindingList<T>

    {

        private List<T> _sortableList;

 

        public SortableBindingList(List<T> list)

            : base(list)

        {

            _sortableList = list;

        }

 

        protected override bool SupportsSortingCore

        {

            get { return true; }

        }

 

        protected override void ApplySortCore(PropertyDescriptor property,

                                              ListSortDirection direction)

        {

            string sortExpression = property.Name;

 

            if (direction == ListSortDirection.Descending)

            {

                sortExpression = sortExpression + ” DESC”;

            }

 

            DynamicComparer<T> comparer =

                new DynamicComparer<T>(sortExpression);

 

            _sortableList.Sort(comparer.Comparer);

        }

 

        protected override void RemoveSortCore() {}

    }

Binding a sortable list to a DataGridView is now as easy as this:

            dataGridView.DataSource = new SortableBindingList<Order>(OrderService.GetAllOrders());

Obviously, the sorting capabilities are pretty basic… only one column at a time, sorting can’t be removed, etc… For a lot of scenario’s though, this could already be sufficient

Posted in WinForms | No Comments »