Μάλλον δεν έχεις καταλάβει τη φιλοσοφία του DataSet και του DataViewManager. Γενικά, όταν θέλουμε να φιλτράρουμε τα data από τα DataTables δεν τα κάνουμε copy σε νέα DataSets γιατί τέτοιες διαδικασίες κοστίζουν. Φαντάσου να έχεις DataTables με πολλές εγγραφές. Δουλεύουμε με αυτό το DataSet που έχουμε, αλλάζοντας τα φίλτρα κατά το δοκούν. Αρχικά, μπορούμε να δουλέψουμε χωρίς καν το DataViewManager. Σε κάθε DataTable μπορείς να ορίσεις το Filter property και να κρύψεις τα DataRows που δεν σε ενδιαφέρουν. Το DataTable θα συνεχίσει να περιέχει όλα τα DataRows αλλά τα controls που θα είναι binded πάνω του, θα δείχνουν μόνο όσα τους επιτρέπει το φίλτρο. Από εκεί και πέρα, αν θες να μαζέψεις τα φίλτρα σε ομάδες και να τα διαχειριστεις καλύτερα, μπορείς να χρησιμοποιήσεις ένα ή παραπάνω DataViewManager. Και πάλι το DataSet δεν θα αλλάξει περιεχόμενα αλλά πλέον θα κάνεις bind όλα τα controls πάνω στο εκάστοτε DataViewManager και τότε θα βλέπεις φιλτραρισμένα τα data.
Για παράδειγμα:
DataViewManager nwindDVM = new DataViewManager(nwindDS);
foreach (DataViewSetting myDVS in nwindDVM.DataViewSettings)
{
myDVS.ApplyDefaultSort = true;
}
nwindDVM.DataViewSettings["Customers"].Sort = "CompanyName DESC";
nwindDVM.DataViewSettings["Orders"].RowFilter = "OrderDate >= '01.03.1998' AND OrderDate <= '31.03.1998'";
nwindDVM.DataViewSettings["OrderDetails"].RowFilter = "ProductID = 35";
someDataGrid.SetDataBinding(nwindDVM, "Customers");
Παρατήρησε ότι το someDataGrid κάνει bind στο DataTable Customers αλλά μέσα από το nwindDVM.
Vir prudens non contra ventum mingit