The BindingSource class was introduced because people were used to
having the notion of a "current" record combined ^with^ the data set.
You can access the current values of the "row" in the BindingSource
through the indexer (the same way you would with a DataRow).
If you need to cycle through the rows, you can use the MoveFirst,
MoveNext, MoveLast, MovePrevious methods to navigate through the data.
If the possibility of the type of the underlying data source might
change, from a design standpoint, it would be better to work with the
BindingSource, since that is abstracting the underlying data type.
However, if the underlying data source type is "baked", meaning it will
not change, then work with the data set.
I will typically construct my own DataView when working with a DataTable
and I need to perform specific sorting or filtering. If I don't have a need
for that, then I access the DataSet directly.
- Nicholas Paldino [.NET/C# MVP]