Αν θέλεις να το κατασκευάσεις εξ' αρχής και να μην καταφύγεις σε control 3ου κατασκευαστή, τότε έχεις μπόλικη δουλειά...
Λοιπόν, αρχικά θα πρέπει να φτιάξεις ένα νέο δικό σου UserControl μέσα στο οποίο θα βάλεις το DataGrid και από κάτω από κάθε column ένα TextBox. Το θέμα είναι σε αυτό το σημείο να συγχρονίσεις τα TextBoxes με το πλήθος των DataColumns και το πλάτος τους, ώστε αυτό να γίνεται δυναμικά. Κατόπιν, θα χρειαστεί να φτιάξεις ένα DataView το οποίο θα παίζει πάνω στο DataTable και θα κάνεις bind το DataGrid πάνω σε αυτό αντί στο DataTable. Το πλεονέκτημα του DataView είναι ότι είναι bindable και δέχεται φίλτρα τα οποία αλλάζουν δυναμικά τις εγγραφές που φαίνονται στο DataGrid χωρίς να χρειάζεται requery.
Εγώ ακολουθώ διαφορετική τεχνική... Φτιάχνω μια ToolWindow φόρμα στην οποία μπορεί ο χρήστης να καθορίσει τα φίλτρα. Αυτή η φόρμα είναι dockable οπότε αν δεν χρειάζεται κρύβεται, ενώ αν χρειάζεται την τοποθετεί όπου θέλει. Παίζω με DataView όταν δεν έχουν μεγάλο όγκο τα data και δεν είναι πρόβλημα να τα κρατάει όλα στη μνήμη, διαφορετικά κάνω requeries.
Vir prudens non contra ventum mingit