First of all, I want to say GREAT project. Good stuff.
I have found an issue, when filtering out the zeros (0) using the checkbox.
After you do this, when you edit the value of one the cells "in the column that was filtered", the row then disappears from the grid and when the event handler for CellEndEdit fires the value is null for the row/column that was edited.
I tracked the issue to the use of the "IN" clause in the filtering code.
DESCRIPTION OF PROBLEM
For example, say you have 5 rows with the following values:
row 1 = 100
row 2 = 0
row 3 = 200
row 4 = 0
row 5 = 300
Then the user selects the filter menu on the column and ticks the checkbox to "not" display zeros. In the background your DataTable filter looks like this:
[{0}] IN (100, 200, 300)
The filter is including all the values that are ticked. The grid then looks (obviously) like this:
row 1 = 100
row 3 = 200
row 5 = 300
Now, if the user modifies row 3 to equal 600, becauase 600 is not in the datatable "IN" clause filter the row disapears from the grid, and even the CellEndEdit doesnt capture the users modification.
FIX FOR PROBLEM
I swapped the code from an "IN" to a "NOT IN" and it seems to fix this problem. So the code finds out all the cells that are NOT ticked and uses a "NOT IN" clause for the filter.
e.g: [{0}] NOT IN (0, 1)
Then, when the user modifies any of the value, the row doesnt disppear because the values still satisfy the filter clause.
CODE I HAVE MODIFIED
The code that I have changed is in the SetCheckListFilter() function.
I changed 4 lines in total:
Original Line = "&& n.CheckState != CheckState.Unchecked"
Changed Line = "&& n.CheckState == CheckState.Unchecked"
Original Line = "FilterString += "[{0}] IN (" + filter + ")";"
Changed Line = "FilterString += "[{0}] NOT IN (" + filter + ")";"
Original Line = FilterString += "Convert([{0}],System.String) IN (" + filter + ")";"
Changed Line = "FilterString += "Convert([{0}],System.String) NOT IN (" + filter + ")";"
Also you didn't specify decimal in your list of datatypes (thats what I am using to represent money)
I have added: "DataType == typeof(decimal)" to the list of datatypes in that funtion.
Sorry. I am sure there is a better way of showing you the code I have modified instead of writing it out here!
SUMMARY
I just wanted to send this to you to get your thoughts on the fix I have applied.
Thanks.