Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Φιλτράρισμα σε DataGridView

Îåêßíçóå áðü ôï ìÝëïò kallileo. Τελευταία δημοσίευση από το μέλος Smert στις 18-03-2008, 08:50. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  25-02-2008, 14:40 40469

    Φιλτράρισμα σε DataGridView

    Εχω φτιάξει DataSet με το Wizard του VS 2008 C# Express και εχω κανει bind εναν πινακα απο το dataset σε ενα DataGridView. Αυτο που θελω ειναι να μπορω να εισαγω π.χ σε δυο textboxes αρχικη και τελικη ημερομηνια και μου δειχνει τα αποτελεσματα που αντιστοιχουν σε αυτες. 
    Αν δεν ήταν το DataSet και υπήρχε κατευθείαν επικοινωνια με την βάση θα μπορούσανα το με SQL queris αλλα τωρα δεν εχω καταλαβει τι πρέπει να κάνω...Πως μπορω να φλτράρω το DataSet? 
  •  25-02-2008, 20:06 40484 σε απάντηση της 40469

    Απ: Φιλτράρισμα σε DataGridView

    Δεν είναι και τόσο σωστό να γεμίζεις το DataTable με όλα τα data από τη βάση και κατόπιν να φιλτράρεις ώστε να κρατήσεις μόνο αυτά που θέλεις. Όταν μεγαλώσει η βάση θα κάνει πολύ ώρα να πάρει τα data ενώ στην ουσία δεν θα τα χρειάζεσαι όλα. Θα σου πρότεινα εκ των προτέρων να τραβάς μόνο όσα χρειάζεσαι, δηλαδή να χρησιμοποιήσεις ένα Parameterized Query. Μπορείς να το ψάξεις στις μηχανές αναζήτησης (πχ χρησιμοποιώντας DataTable fill using parameterized query) Ρίξε μια ματιά σε αυτό το video: http://msdn2.microsoft.com/en-us/vbasic/bb643830.aspx Είναι σε VB.NET αλλά αφορά περισσότερο στη διαδικασία, οπότε δεν θα δυσκολευτείς να το κάνεις και σε C#.

    Αν επιμένεις να κάνεις αυτό που σε συμβουλεύω να μην κάνεις Big Smile τότε θα πρέπει να χρησιμοποιήσεις το property Filter του DataTable. Πχ αν πεις κάτι σαν

    myDataTable.Filter = String.Format("fromDateField>={0} AND toDateField<={1}",fromDate, toDate);

    τότε θα δεις όλες τις εγγραφές που βρίσκονται εκτός range να εξαφανίζονται από το grid. Χρειάζεται μόνο λίγη προσοχή με τα data types.


    Vir prudens non contra ventum mingit
  •  26-02-2008, 10:19 40496 σε απάντηση της 40484

    Απ: Φιλτράρισμα σε DataGridView

    Ευχαριστω για την απαντηση Kelman...
    Το ειχα βρει αυτο με το filter property αλλα με λιγο διαφορετικη συνταξη.
     
    Εχω καποιο προβλημα να καταλαβω το πως δουλευουν οι Wizard στο VS. Οταν ας πουμε οτι γεμιζω ενα DataGridView...που σε ποιο αρχειο αποθηκευονται το query και τα sql commands, η αρχικοποιηση του Adapter και λοιπα....Γενικα οταν φτιαχνω κατι με Wizard χανω την προελευση του.
     
    Για να καταλαβω αυτο που λες ειναι να κανω query με τις καταλληλες παραμετρους προς την βαση καθε φορα που αλλαζουν αυτες οι παράμετροι?
     
    Για βαση χρησιμοποιω τον Compact Server...υπαρχει καποιο οριο εγγραφων για τον οποιο παρατηρειται σημαντικη μειωση της ταχυτητας φορτωσης των δεδομενων? Λογικα ο δικος μου πινακας δεν πρεπει να ξεπερναει τις 1000-1500 εγγραφες.
  •  26-02-2008, 10:41 40498 σε απάντηση της 40496

    Απ: Φιλτράρισμα σε DataGridView

    kallileo:
    Εχω καποιο προβλημα να καταλαβω το πως δουλευουν οι Wizard στο VS. Οταν ας πουμε οτι γεμιζω ενα DataGridView...που σε ποιο αρχειο αποθηκευονται το query και τα sql commands, η αρχικοποιηση του Adapter και λοιπα....Γενικα οταν φτιαχνω κατι με Wizard χανω την προελευση του.
     
    O συνήθης ένοχος wizard σε αυτές τις περιπτώσεις είναι αυτός με τον οποίο κατασκευάζεις ένα Typed DataSet. Όλες οι κλάσεις που κατασκευάζονται βρίσκονται μέσα στο typed dataset. Αποτελεί το σύνηθες σημείο εκκίνησης. Μόλις το φτιάξεις, κατόπιν κάνεις τα bindings, κλπ. Θα σου πρότεινα να κοιτάξεις τα videos εδώ: http://msdn2.microsoft.com/en-us/vbasic/bb466226.aspx στην ενότητα "Forms over Data Video Series"
     
    kallileo:
    Για να καταλαβω αυτο που λες ειναι να κανω query με τις καταλληλες παραμετρους προς την βαση καθε φορα που αλλαζουν αυτες οι παράμετροι?
     
    Ακριβώς
     
    kallileo:
    Για βαση χρησιμοποιω τον Compact Server...υπαρχει καποιο οριο εγγραφων για τον οποιο παρατηρειται σημαντικη μειωση της ταχυτητας φορτωσης των δεδομενων? Λογικα ο δικος μου πινακας δεν πρεπει να ξεπερναει τις 1000-1500 εγγραφες.

    Συγκεκριμένο όριο όχι, εξαρτάται από διάφορες συνθήκες. Πιστεύω όμως ότι είναι καλό να φτιάχνεις εξ αρχής την εφαρμογή σου σωστά...

     


    Vir prudens non contra ventum mingit
  •  26-02-2008, 11:45 40502 σε απάντηση της 40498

    Απ: Φιλτράρισμα σε DataGridView

    Για την ωρα το ψαχνω με το Filter και εχω το παρακατω:
     
    private void Date_Click(object sender, EventArgs e)
    {
    string fromDate, toDate;
    fromDate = dateTimePicker1.Value.ToShortDateString();
    toDate = dateTimePicker2.Value.ToShortDateString();
    transactionsBindingSource.Filter = "Date>='" + fromDate + "'"+" AND "+"Date<='"+toDate+"'";

    }

    private void Supplier_Click(object sender, EventArgs e)
    {
    string supp;
    supp = comboBox1.SelectedValue.ToString();
    transactionsBindingSource.Filter = "Supllier='" + supp + "'";
    }

    private void Reset_Click(object sender, EventArgs e)
    {
    transactionsBindingSource.RemoveFilter();
    }
     
    Εχω δυο φιλτρα. Το προβλημα με αυτα ειναι οτι το καθενα απο αυτα δουλευει ανεξαρτητα. Πως θα μπορουσα να τα συνδιασω?
     
  •  26-02-2008, 12:09 40503 σε απάντηση της 40502

    Απ: Φιλτράρισμα σε DataGridView

    Το Filter property δουλεύει παρόμοια με το WHERE clause ενός SQL query. Μπορείς να κάνεις συνδυασμούς με AND, OR ή NOT operators. Για περισσότερες λεπτομέρειες κοίτα εδώ: http://msdn2.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

    Συνήθως, χτίζεις το filter string σταδιακά. Αν για παράδειγμα σε μια φόρμα έχεις κριτήρια για 3 πεδία, ελέγχεις αν ο χρήστης έχει εισάγει τιμή για το κάθε κριτήριο και κατόπιν προσθέτεις το ανάλογο expression στο filter string. Στο παράδειγμά σου, θα πρέπει όταν κάνει clikc στα Date ή στο Supplier, να κατασκευάζει εξαρχής το filter string περνώντας όλες τις παραμέτρους σε μία function (που θα επιστρέφει το string) ώστε το ένα event να μην αναιρεί φίλτρο του άλλου.


    Vir prudens non contra ventum mingit
  •  26-02-2008, 13:02 40507 σε απάντηση της 40503

    Απ: Φιλτράρισμα σε DataGridView

    Για να γινει αυτο θα πρεπει να κανω handle τα event που χρειαζεται ετσι?
  •  26-02-2008, 14:54 40514 σε απάντηση της 40507

    Απ: Φιλτράρισμα σε DataGridView

    Δεν καταλαβαίνω τι εννοείς. Βασικά, το πως ακριβώς θα το κάνεις implement εξαρτάται από το πως έχεις φτιάξει το UI σου.


    Vir prudens non contra ventum mingit
  •  18-03-2008, 08:50 40946 σε απάντηση της 40514

    Απ: Φιλτράρισμα σε DataGridView

    Δηλαδή με το που πατά Date ή Supplier (ή ακόμα καλύτερα ένα κοινό button "Filter") πάω και ψάχνω κάθε κριτήριο που έχει εισάγει και το προσθέτω στο string? και ή λεπτομέρεια για το πρώτο κριτήριο που θα βρέι? αν είναι το πρώτο κριτήριο απλά το προσθέτει, για κάθε επόμενο βάζει και τη λέξη AND?

    κι εμένα με ενδιαφέρει το θέμα, και πιστεύω η δεύτερη μέθοδος Fill by query είναι καλύτερη για λόγο φορτώματος και επειδή όταν η filter δε βρίσκει τίποτα, σου εμφανίζει όλη τη βάση σε grid αν δεν κάνω λάθος... Κάτι που μάλλον είναι λίγο ανορθόδο.

    Για τη μέθοδο για τα query φτιαχνουμε το query π.χ. με τον query builder και το καλούμε όπως το ονομάσαμε  (π.χ. FillBy ) από το button-handler, έτσι?

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems