Αν έχω καταλάβει καλά, δουλεύεις σε .NET 2.0 οπότε δεν χρειάζεται να παίξεις με DataView. Την ίδια δουλειά μπορείς να κάνεις με το Filter property του BindingSource. To "αν θα πρέπει" εξαρτάται... Ο ένας τρόπος είναι να φορτώνεις όλα τα data και θέτοντας το Filter property σε διάφορες τιμές να αλλάζεις αυτά που βλέπει ο χρήστης. Πλεονεκτήματα: Εύκολο στην υλοποίηση και γρήγορο refresh του DataGridView καθώς δεν έχεις refetch από τον server. Μειονέκτημα: Αν είναι πολλά τα data θα αργήσει να τα φορτώσει αρχικά και γενικά θα έχεις πάντοτε στη μνήμη πολύ περισσότερα data απ'όσα χρειάζεσαι. Από την άλλη εξαρτάται και το τι θες να κάνεις, πως φτιάχνεις τη λειτουργικότητα της εφαρμογής. Δηλαδή αν θες να φέρεις τις παραγγελίες ενός πελάτη σε μια φόρμα, συνήθως δεν τραβάς όλες τις παραγγελίες για να τις φιλτράρεις στον client και να αφήσεις μόνο του πελάτη που σε ενδιαφέρει, τραβάς εκ των προτέρων μόνο αυτές που σε ενδιαφέρουν. Από την άλλη, αν έχεις όλα τα προϊόντα και θέλεις να τα φιλτράρεις μερικές φορές, καλύτερα να τα έχεις όλα και να βάζεις φίλτρα.
Για να φτιάξεις ένα parameterized query, θα πρέπει όταν δηλώσεις το query να το γράψεις ανάλογα:
SELECT * FROM TIM1 where pelpro=@pelpro
Το @pelpro είναι η παράμετρός σου και πριν κάνεις το Fill, θα πρέπει να δώσεις τιμή. Όπως γίνεται και με τις stored procedures. O κώδικας που παράγει ο designer είναι παρόμοιος με τον παρακάτω:
Dim sSqlCmd As String = "SELECT * FROM Products WHERE ProductID = @ProductID"
Dim SqlCon As SqlConnection = New SqlConnection("......")
Dim SqlCmd As SqlCommand = New SqlCommand(sSqlCmd, SqlCon)
SqlCmd.Parameters.Add(New SqlParameter("@ProductID", SqlDbType.Int))
SqlCmd.Parameters("@RecordCount").Value = 12345
SqlCon.Open
Dim SqlDr As SqlDataReader = SqlCmd.ExecuteReader
Vir prudens non contra ventum mingit