Presents sequences (instances of IEnumerable or IEnumerable) as logical aggregations of data as an alternative to the traditional view of a persistent collection. Demonstrates how LINQ operators treat both persisted and non-persisted sequences equally (even infinite sequences). Introduces the LINQ Concat<> operator and explains how its result can be used like a database view. Shows how to bind controls to instances of IEnumerable using a list wrapper, as well as explaining the advantages presented by doing so. Continue reading

Regular Windows Forms data-binding can only bind to the properties directly belonging to each list item. This post explains how to bind to properties of properties (and so on, recursively) by creating a special collection class that exposes nested properties using ITypedList and PropertyDescriptor. You can use AggregationBindingList as a data source for the ComboBox, ListBox and DataGridView controls. Continue reading

Introduces a custom Windows Forms control that resembles a ComboBox with a TreeView for its drop-down portion. Explains how the control is implemented, extending Control and using visual styles to paint the main part of the control, then using ToolStripDropDown and custom rendering to create the tree and popup. Supports images, sorting, scrolling and paths. Full source code provided. Continue reading