}\r
}\r
\r
- if (rowState != DataViewRowState.None) {\r
+ if (rowState != DataViewRowState.None)\r
_rowStateFilter = rowState;\r
- }\r
- else {\r
+ else\r
// FIXME : what is the correct value ?\r
_rowStateFilter = DataViewRowState.CurrentRows;\r
- }\r
}\r
\r
#endregion // Constructors\r
}\r
}\r
\r
+ internal bool HasFilter\r
+ {\r
+ get { return _filter != null; }\r
+ }\r
+\r
#endregion // Properties\r
\r
#region Methods\r
if (index < 0)\r
return index;\r
\r
- _tmpRow._current = index;\r
- return _filter.EvalBoolean(_tmpRow) ? index : -1;\r
+ return CanContain (index) ? index : -1;\r
}\r
\r
- internal static int GetRecord(DataRow row, DataViewRowState rowStateFilter)\r
+ internal bool CanContain (int index)\r
{\r
+ if (_filter == null)\r
+ return true;\r
\r
- if (row.Original == row.Current) {\r
- if ((rowStateFilter & DataViewRowState.Unchanged) != DataViewRowState.None) {\r
- return row.Current;\r
- }\r
- }\r
- else if (row.Original == -1) {\r
- if ((rowStateFilter & DataViewRowState.Added) != DataViewRowState.None) {\r
- return row.Current;\r
- }\r
+ _tmpRow._current = index;\r
+ return _filter.EvalBoolean(_tmpRow);\r
+ }\r
+\r
+ internal bool ContainsVersion (DataRowState state, DataRowVersion version)\r
+ {\r
+ switch (state) {\r
+ case DataRowState.Unchanged:\r
+ if ((_rowStateFilter & DataViewRowState.Unchanged) != DataViewRowState.None)\r
+ return ((version & DataRowVersion.Default) != 0);\r
+ break;\r
+ case DataRowState.Added:\r
+ if ((_rowStateFilter & DataViewRowState.Added) != DataViewRowState.None)\r
+ return ((version & DataRowVersion.Default) != 0);\r
+ break;\r
+ case DataRowState.Deleted:\r
+ if ((_rowStateFilter & DataViewRowState.Deleted) != DataViewRowState.None)\r
+ return (version == DataRowVersion.Original);\r
+ break;\r
+ default:\r
+ if ((_rowStateFilter & DataViewRowState.ModifiedCurrent) != DataViewRowState.None)\r
+ return ((version & DataRowVersion.Default) != 0);\r
+ if ((_rowStateFilter & DataViewRowState.ModifiedOriginal) != DataViewRowState.None)\r
+ return (version == DataRowVersion.Original);\r
+ break;\r
}\r
- else if (row.Current == -1) {\r
- if ((rowStateFilter & DataViewRowState.Deleted) != DataViewRowState.None) {\r
+\r
+ return false;\r
+ }\r
+\r
+ internal static int GetRecord(DataRow row, DataViewRowState rowStateFilter)\r
+ {\r
+ switch (row.RowState) {\r
+ case DataRowState.Unchanged: {\r
+ if ((rowStateFilter & DataViewRowState.Unchanged) != DataViewRowState.None)\r
+ return row.Proposed >= 0 ? row.Proposed : row.Current;\r
+ break;\r
+ }\r
+ case DataRowState.Added: {\r
+ if ((rowStateFilter & DataViewRowState.Added) != DataViewRowState.None)\r
+ return row.Proposed >= 0 ? row.Proposed : row.Current;\r
+ break;\r
+ }\r
+ case DataRowState.Deleted: {\r
+ if ((rowStateFilter & DataViewRowState.Deleted) != DataViewRowState.None)\r
return row.Original;\r
- }\r
- }\r
- else if ((rowStateFilter & DataViewRowState.ModifiedCurrent) != DataViewRowState.None) {\r
- return row.Current;\r
- }\r
- else if ((rowStateFilter & DataViewRowState.ModifiedOriginal) != DataViewRowState.None) {\r
- return row.Original;\r
+ break;\r
+ }\r
+ default:\r
+ if ((rowStateFilter & DataViewRowState.ModifiedCurrent) != DataViewRowState.None)\r
+ return row.Proposed >= 0 ? row.Proposed : row.Current;\r
+ if ((rowStateFilter & DataViewRowState.ModifiedOriginal) != DataViewRowState.None)\r
+ return row.Original;\r
+ break;\r
}\r
\r
- return -1;\r
+ return -1;\r
}\r
\r
/// <summary>\r
return false;\r
}\r
\r
- if (_filter != filter)\r
- return false;\r
+ if (_filter != null) {\r
+ if (!_filter.Equals (filter))\r
+ return false;\r
+ }\r
+ else if (filter != null)\r
+ return false;\r
\r
if (Columns.Length != columns.Length) {\r
return false;\r
}\r
else {\r
for(int i=0; i < columns.Length; i++) {\r
- if (Columns[i] != columns[i]) {\r
+ if (Sort [i] != ListSortDirection.Ascending || Columns[i] != columns[i]) {\r
return false;\r
}\r
}\r
return true;\r
}\r
\r
+ internal bool DependsOn (DataColumn column)\r
+ {\r
+ if (_filter == null)\r
+ return false;\r
+\r
+ return _filter.DependsOn (column);\r
+ }\r
+\r
#endregion // Methods\r
}\r
}\r