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

 

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

Quick type Selection σε DataGridView

Îåêßíçóå áðü ôï ìÝëïò teliaz. Τελευταία δημοσίευση από το μέλος teliaz στις 13-12-2008, 13:40. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  18-11-2008, 19:30 46308

    Quick type Selection σε DataGridView

    Έχει κανείς ιδεά πως μπορώ να κάνω ενεργοποιήσω το quick type Selection σε ένα dataGridView ???? Εννοώ να μπορώ σε μία μεγάλη λίστα πατώντας το ένα γράμμα να με μεταφέρει  και να επιλέγει ένα row στο πρώτο αποτέλεσμα που βρίσκει από αυτό το γράμμα.
    Όπως παράδειγμα λειτουργεί και στον windows explorer.

    Η εφαρμογή είναι σε WinForm  σε C# .ΝΕΤ 2.0...


    Ευχαριστώ προκαταβολικά!!
  •  19-11-2008, 03:42 46320 σε απάντηση της 46308

    Απ: Quick type Selection σε DataGridView

    Καλή ερώτηση γιατί αν και επιφανειακά νομίζεις ότι η λύση είναι εύκολη τελικά δεν είναι και τόσο.

    Από όσο γνωρίζω δεν υπάρχει τέτοια λειτουργικότητα μέσα στο DataGridView για να την ενεργοποιήσεις, οπότε μάλλον θα πρέπει να την δημιουργήσεις.

    Σε γενικές γραμμές μπορείς να ακολουθήσεις δύο τρόπους για να βρεις το Row/Rows που θέλεις μέσα σε ένα DataGridView. Να ψάξεις είτε στην λίστα που περιέχονται οι εγγραφές που μας δείχνει το Grid ή να ψάξεις απευθείας πάνω στο Grid.

    Και οι δύο όμως έρχονται με κάποια συν και πλην.

    Αναζήτηση από λίστα που περιέχονται οι εγγραφές (π.χ Dataset)

    Εάν χρησιμοποιείς Dataset πάνω στο οποίο κάνεις Bind το DataGridView μπορείς να ψάξεις για την εγγραφή που θέλεις μέσα στο Dataset αντί πάνω στο Grid. Διαλέγοντας την επιλογή αυτή ουσιαστικά φτιάχνεις έναν αλγόριθμο ανεξαρτήτου control που χρησιμοποιείς και θα παίζει σε κάθε περίπτωση όπου χρησιμοποιείς Dataset και θέλες την λειτουργικότητα αυτή. Επίσης ένα στοιχείο είναι πως η αναζήτηση στο Dataset θα γίνεται με την πραγματική τιμή των πεδίων και όχι με την φαινομενική που ίσως να εμφανίζεις στο Grid. (π.χ ένα πεδίο έχει τιμή False στο Dataset αλλά εσύ στο Grid να θέλεις να δώσεις άλλη περιγραφή, π.χ Δεν υπάρχει ή Λάθος κτλ.). Αυτό μπορεί να είναι είτε κακό είτε καλό ανάλογα με την περίπτωση.

    Για να βρεις την εγγραφή που θέλεις μέσα στο DataTable του Dataset μπορείς να χρησιμοποιήσεις είτε την Find ή FindRows μέθοδο του DataTable. H Find επιστρέφει το index της πρώτης εγγραφής που ικανοποιεί το κριτήριο ενώ η FindRows ένα κατάλογο από indexes των εγγραφών που ικανοποιούν το κριτήριο (Αυτό στο Grid θα μπορούσε να μεταφραστεί ως Multiply Selection).

    Επειδή δεν προγραμματίζω σε C# (αμάν πια μας φάγατε με αυτήν την γλώσσα, σε λίγο ούτε παράδειγμα δεν θα βρίσκουμε στο internet, κλείνω παρένθεση) δεν είμαι σε θέση να σου δώσω παράδειγμα, κάποιος άλλος όμως που γνωρίζει C# και θα ήθελε να προσφέρει τα φώτα του ίσως αν είχε χρόνο να σου έγραφε κάτι απλό (Είδες τι χάνεις; Κλείνω παρένθεση).

    Αλλά ψάχνοντας τυχαία για κάτι παρόμοιο σε C# έπεσα επάνω σε αυτό.

    Κάτι ακόμα πάνω στην χρήση του DataTable όπου visually προσωπικά μου αρέσει είναι η δυνατότητα να φιλτράρει τις εγγραφές και να σου δείχνει μόνο αυτές που ικανοποιούν το κριτήριο αναζήτησής σου. Ίσως να έριχνες και μία ματιά προς αυτή την κατεύθυνση αν σε ενδιαφέρει. Ένα πλήρες παράδειγμα θα βρεις εδώ (μπα τι βλέπω; το παράδειγμα σε vb και αν θέλεις το κατεβάζεις και σε C#... μπα μπα εξελίξεις.... κλείνω παρένθεση).

    Αναζήτηση από λίστα custom objects που περιέχονται οι εγγραφές. (π.χ List(Of ....))

    Εδώ τα πράγματα περιπλέκονται λιγάκι. Συνήθως όλες οι λίστες που μπορούν να περιέχουν Custom Objects και να μπορούν να γίνουν Bind πρέπει να κάνουν implement να υλοποιήσουν δηλαδή το Interface IList το οποίο έχει και την μέθοδο Contains. Η μέθοδος αυτή ουσιαστικά βλέπει αν έχουμε ένα custom object μέσα στην λίστα μας. Εμείς όμως δεν θέλουμε να γνωρίζουμε αν υπάρχει ένα custom object γενικά αλλά ποια ή ποιο object έχουν σε ένα property την συγκεκριμένη τιμή που ψάχνω. Για να μην λέω πολλά τα πράγματα είναι πιο δύσκολα αν χρησιμοποιείς Custom Objects. Ίσως η πιο απλή λύση εδώ να ήταν ένα iterate με ότι αν σημαίνει αυτό σε θέματα ταχύτητας. Επίσης θα πρέπει να φτιάξεις και έναν αλγόριθμο Sort έτσι ώστε όταν πατάς επάνω στο Grid για να κάνεις sort αυτό να γίνεται στην λίστα επάνω και όχι μόνο στο grid. Μάλλον δύσκολο σενάριο αυτό.

    Αναζήτηση επάνω στο Grid.

    Αν το grid που έχουμε δεν είναι Bound πάνω σε κάποιο collection από δεδομένα ή θέλουμε να ψάξουμε με τις φαινομενικές τιμές που έχουμε επάνω σε αυτό και όχι με τις πραγματικές που μπορεί να υπάρχουν από κάτω τότε προτείνετε να ψάξουμε απευθείας επάνω στο grid.

    Επειδή όμως το Grid δεν έχει κάποιο μηχανισμό για να ψάχνει εγγραφές, από όσο γνωρίζω τουλάχιστον θα πρέπει να φτιάξεις κάτι εσύ. Ένας απλός αλγόριθμος θα μπορούσε να είναι το iteration μεταξύ των εγγραφών. Οι εγγραφές που έχει το Grid επιστρέφονται από την συνάρτηση RowCount. Αν όμως επιτρέπεις από το ίδιο Grid να καταχωρούνται νέες εγγραφές από τον αριθμό που θα σου επιστραφεί θα αφαιρέσεις μία από το νούμερο που θα σου επιστρέψει η RowCount. Είναι αυτή η κενή γραμμή που χρησιμοποιούμε για να εισάγουμε νέα εγγραφή στο Grid.

    Δεν γράφω κώδικα που να αφορά το Grid γιατί νομίζω πως γνωρίζεις πως να πέρνεις την τιμή που έχει ένα κελί. Απλά σου παρουσίασα τις επιλογές που έχεις από την στιγμή που δεν υπάρχει τέτοια λειτουργία μέσα στο grid.

     

  •  13-12-2008, 13:40 46886 σε απάντηση της 46320

    Απ: Quick type Selection σε DataGridView

    Ευχαριστώ πάρα πολύ για την πολύ επεξηγηματική σου απάντηση infoCENTER.
    Δεν χρησιμοποιω DataSet αρα θα κινηθώ με αναζήτηση πάνω στο Grid.

    Όταν θα ασχοληθώ περισσότερο θα ποστάρω και το τμήμα του κώδικα.
    Ευχαριστώ και πάλι.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems