Hi,

I solved the problem with sorting in DataGrid (or List).

The problem was: a sorted dataProvider is the same object,so making
"dataProvider = sortedDP" was stopped at the start of the method since as
usual we check if dataprovider is the same and in that case we return.

The workaround was to do

dataProvider = null;
dataProvider = oldDP;

This had 2 problems:
1.- if selection was in place, the selection was lost
2.- if some scrolling was in place, the scrolling was lost.

So my solution, was create a new "sortChanged" event

1.- in DataGridSort we dispatch the "sortChanged" instead of
"dataProviderChanged" (in fact that's what really happened, right?).
2.- DataGridView now listen for "sortChanged" too (additionally to
"dataProviderChanged"), and we have a new handler that just propagate to
make each list to call "list.model.sortChangedHandler(dp);"
3.- the shared model, ArraySelectionModel, decouple dataProvider setter to
extract the main functionality to "setDataProvider" and add
"sortChangeHandler" that avoid to check if dataProvider is the same as
before, so this time the refresh happen.

The solution made the selection and the scrolling be persisted (if any), so
for now this solved the problems and seems (at least) to be a step forward.

So my question: Do you think this solution is ok?
If so, maybe the event name should change to something that describes
things "wider", since this could be a "sort" a "filtering",....

-- 
Carlos Rovira
http://about.me/carlosrovira

Reply via email to